Ivo*_*tão 1 c# reflection reflection.emit
我有一个通用的抽象基类,我想从中通过reflection.emit构建一个动态类型.此外,我需要自定义派生类的默认构造函数来初始化一些字段.要正确构建派生类的默认构造函数,我需要获取基类的默认构造函数并调用它.问题是我无法从基类中获取默认构造函数.
一个例子:
public abstract class Test<T>
{
private T data;
public abstract void Go();
}
public class TestDerive : Test<int>
{
public override void Go()
{
}
}
class Program
{
static void Main(string[] args)
{
ConstructorInfo[] constructors = typeof(Test<>).GetConstructors();
int length = constructors.Length;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有东西,长度始终为零.我不明白.我在反射器中检查了类似的情况,确实调用了抽象类的基础构造函数.问题是如何让它做同样的事情?
抽象类的默认构造函数受到保护 - 您需要指定绑定标志以通过反射访问它.您可以使用
typeof(Test<>).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance)
Run Code Online (Sandbox Code Playgroud)
(当然,在普通代码中它是公共的还是受保护的,没有实际区别,因为除了派生类型之外你不能调用构造函数.)
请注意,无论该类是否是通用的,都是这种情况 - 这是导致您出现问题的抽象性.
归档时间: |
|
查看次数: |
1164 次 |
最近记录: |