如下面的代码,我只想知道我可以将Invoke()用于抽象类
public abstract class genericDefine
{
public void Foo<T>(T item)
{
Console.WriteLine(typeof(T).Name);
}
}
var bar = typeof(Bar);
var fooMethod = typeof(genericDefine).GetMethod("Foo");
var fooOfBarMethod = fooMethod.MakeGenericMethod(new[] { bar });
fooOfBarMethod.Invoke(new genericDefine(), new object[] { new Bar() });
我也试过使用Derived类对象,但它对我不起作用....!
答案 0 :(得分:4)
您必须将方法设为静态,或者传入实例以调用方法。如果没有实际拥有实例,则无法调用实例方法(并且无法实例化抽象类)。
所以这个(使用实例):
public class genericDefineInstance : genericDefine
{ }
...
fooOfBarMethod.Invoke(new genericDefineInstance(), new object[] { new Bar() });
或(使用静态方法):
public static void Foo<T>(T item)
{
Console.WriteLine(typeof(T).Name);
}
...
fooOfBarMethod.Invoke(null, new object[] { new Bar() });
答案 1 :(得分:1)
为了在不传入对象实例的情况下调用MethodInfo
,您需要将该方法定义为static
。因此,如果您的方法被定义为这样,它确实有效。否则,您需要拥有抽象基类的子类实例。
public abstract class AbstractClass
{
public static void Foo<T>(T item)
{
Console.WriteLine(typeof(T).Name + ": " + item);
}
}
但为什么班级为abstract
?
abstract
类static
- 这违背了abstract
类的目的答案 2 :(得分:0)
不,你不能。要调用您的方法,您仍然需要该类的实例,并且您无法创建抽象类的实例。