using System; public class C { public D D { get; private set; } public string Value { get; private set; } public Foo Foo { get; set; } public int Test () { dynamic d = new C (); return D.Foo (d.Value); } public static int Test2 (dynamic d) { return Foo.Method(d); } public static int Main () { var c = new C (); if (c.Test () != 1) return 1; if (C.Test2 ("s") != 1) return 2; return 0; } } public struct D { public int Foo (string value) { return 1; } } public class Foo { public static int Method (string s) { return 1; } }