public void TestDelegate() { // Instantiating the delegates with the methods. DContravariant <Control> dControl = SampleControl; DContravariant <Button> dButton = SampleButton; // You can assign dControl to dButton // because the DContravariant delegate is contravariant. dButton = dControl; // Invoke the delegate. dButton(new Button()); }
public void TestVariance() { DInvariant <string> dinString = () => ""; //DInvariant<object> dinObject = dinString; DCovariant <string> dcoString = () => " "; DCovariant <object> dcoObject = dcoString; DContravariant <object> dcontraObject = (a) => Console.WriteLine(a); DContravariant <string> dcontraString = dcontraObject; DVariant <object, string> dObjectString = (a) => $"{a} "; DVariant <object, object> dObjectObject = dObjectString; DVariant <string, string> dStringString = dObjectString; DVariant <string, object> dStringObject = dObjectString; }