// contravariance will delegates public static void Main(string[] args) { ContravarianceDel del = DoSomething; del(null); Console.ReadKey(); }
static void Main(string[] args) { StreamWriter tw = new StreamWriter("dummy"); //Because both StreamWriter and StringWriter inherit from TextWriter //This becomes a valid result ContravarianceDel del = DoSomething; del(tw); Console.ReadKey(); }
static void Main(string[] args) { MaineCoon mc = new MaineCoon("Чейз"); Cat cat = mc; ContravarianceDel del = CatInfo; del((MaineCoon)cat); // Как по мне, так полная хрень! mc.GetInfo(); Console.ReadKey(); }
public void DoTest() { // both return class inherits from TextWriter // 共変性(covariance) del = MethodStream; del = MethodString; // parameter StreamWriter also inherits TextWriter // 反返性(contravariance) contraDel = DoSomething; Func <int, int, int> calc = (x, y) => x + y; Console.WriteLine($"Func<int, int, int> calc = {calc(1, 2)}"); }
static void Main(string[] args) { Console.WriteLine("=========Contra-Covariance:Action============"); Action <object> actObject = SetObject; // Um objeto que é instanciado com um argumento de tipo menos derivado // é atribuído a um objeto instanciado com um argumento de tipo mais derivado. // A compatibilidade da atribuição é revertida. Action <string> actString = actObject; Console.WriteLine("actObject=" + actObject.GetType()); // actObject = System.Action`1[System.Object] Console.WriteLine("actString=" + actString.GetType()); // actString = System.Action`1[System.Object] ContravarianceDel del = DoSomething; Console.ReadKey(); }
static void Main(string[] args) { ContravarianceDel del = DoSomething; }
public static void ContravarianceWithDelegates() { ContravarianceDel del = DoSomething; }
public static void ContravarianceDemo() { ContravarianceDel del = DoSomething; //possible because ContravarianceDel takes a StreamWriter, and TextWriter inherits from StreamWriter }
public void useContravariance() { ContravarianceDel del2 = DoSomething; }
public void teste() { ContravarianceDel del = DoSomething; ContravarianceDel2 del2 = DoSomething; }
public static void Run() { ContravarianceDel del = DoSomething; }
public void Main() { ContravarianceDel del = this.DoSomething; }
static void Main(string[] args) { //Because DoSomething can work with a text writer it can also work with a stream writer. //This is contravariance. ContravarianceDel del = DoSomething; }
public void Ex4_Contravariance() { ContravarianceDel del = MethodContra; del(new Derived()); // requires delegate type }
public static void Test_Contravariance() { del = DoSomething; del(null); Console.ReadLine(); }