C#の型の変動
変動は、ユーザー定義の変換が禁止され、参照型をサポートしています。
- 共分散
戻り値の型は、サブクラスで置き換えることができる場合、これはサポートの種類である共変
- 変性
パラメータの型は、その親に置き換えることができる場合、これはインバータのサポートのタイプです
変動パラメータ
唯一のインターフェイスとデリゲートは、可変パラメータの種類を持つことができ
インバータのパラメータ- アウト
パラメータ共変
例
public class A
{}
public class B:A
共変
サブクラスは親クラスになります
A b=new B();//协变可正常转换
インバーター
親は、サブクラスになり
B b=new A();//这样会直接报错
B b=(B)(new A());//强制转换
共分散とジェネリック
インバーター
インスタンス化パラメータを使用すると、通常のオブジェクトを作成したい場合、あなたは一般的なパラメータ上のマーカーに追加する必要があり、一般的なインターフェースの親であるサブクラスであり、
一般的なインタフェースの定義
public interface IUserService<in T>
{
}
ビジネス層は、インターフェイスを実装定義
public class UserService: IUserService<A>
{
}
インスタンス化
static void Main(string[] args)
{
IUserService<B> s =new UserService();
}
言葉ではない場合は、文句を言うだろう
无法将类型“ConsoleApp6.IServer.UserService”
隐式转换为“ConsoleApp6.IServer.IUserService<B>”。
存在一个显式转换(是否缺少强制转换?)
共変
インスタンス化パラメータを使用すると、通常のオブジェクトを作成したい場合、あなたは一般的なパラメータ上のマーカーに追加する必要があり、一般的なインターフェースの親であるサブクラスであり、
一般的なインタフェースの定義
public interface IUserService<in T>
{
}
ビジネス層は、インターフェイスを実装定義
public class UserService: IUserService<B>
{
}
インスタンス化
static void Main(string[] args)
{
IUserService<A> s =new UserService();
}
言葉ではない場合は、文句を言うだろう
无法将类型“ConsoleApp6.IServer.UserService”
隐式转换为“ConsoleApp6.IServer.IUserService<A>”。
存在一个显式转换(是否缺少强制转换?)