static void Test1() { //<Snippet19> DVariant <String, String> dvariant = (String str) => str + " "; dvariant("test"); //</Snippet19> }
private void Build(DVariant node, Hints hints, CompilerContext ctx) { cw.Type(Dy.Variant); cw.GetMember(node.Name); cw.FunPrep(1); BuildTupleElements(node.Arguments, node.Location, hints, ctx); AddLinePragma(node.Location); cw.NewArgs(node.Arguments.Count); cw.FunArgNm("values"); cw.FunCall(1); }
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; }