public static void Test() { int i = 0; DInvariant <int> dInt = () => i; DVariant <int> dVariantInt = () => i; // All of the following statements generate a compiler error // because type variance in generic parameters is not supported // for value types, even if generic type parameters are declared variant. // DInvariant<Object> dObject = dInt; // DInvariant<long> dLong = dInt; // DVariant<Object> dVariantObject = dVariantInt; // DVariant<long> dVariantLong = dVariantInt; }
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; }