如何调用带有反射泛型类的静态属性?(How do I call a static property

2019-06-26 03:20发布

我有一个类(即我不能修改),简化了这个:

public class Foo<T> {
    public static string MyProperty {
         get {return "Method: " + typeof( T ).ToString(); }
    }
}

我想知道如何调用此方法时,我只有一个System.Type

Type myType = typeof( string );
string myProp = ???;
Console.WriteLinte( myMethodResult );

我已经试过:

我知道如何实例化泛型类与反思:

Type myGenericClass = typeof(Foo<>).MakeGenericType( 
    new Type[] { typeof(string) }
);
object o = Activator.CreateInstance( myGenericClass );

然而,这是正确的,因为我使用的是静态属性实例化一个类? 如何获取的方法,如果我不能编译的时候投它? (System.Object的没有一个定义static MyProperty

编辑我发布,我正在使用的类是一个属性,而不是方法之后实现的。 我的困惑表示歉意

Answer 1:

该方法是静态的,所以你并不需要一个对象的实例。 你可以直接调用它:

public class Foo<T>
{
    public static string MyMethod()
    {
        return "Method: " + typeof(T).ToString();
    }
}

class Program
{
    static void Main()
    {
        Type myType = typeof(string);
        var fooType = typeof(Foo<>).MakeGenericType(myType);
        var myMethod = fooType.GetMethod("MyMethod", BindingFlags.Static | BindingFlags.Public);
        var result = (string)myMethod.Invoke(null, null);
        Console.WriteLine(result);
    }
}


Answer 2:

那么,你并不需要一个实例来调用一个静态方法:

Type myGenericClass = typeof(Foo<>).MakeGenericType( 
    new Type[] { typeof(string) }
);

是OK ...那么,简单地说:

var property = myGenericClass.GetProperty("MyProperty").GetGetMethod().Invoke(null, new object[0]);

应该这样做。



Answer 3:

typeof(Foo<>)
    .MakeGenericType(typeof(string))
    .GetProperty("MyProperty")
    .GetValue(null, null);


Answer 4:

你需要的东西是这样的:

typeof(Foo<string>)
    .GetProperty("MyProperty")
    .GetGetMethod()
    .Invoke(null, new object[0]);


文章来源: How do I call a static property of a generic class with reflection?