我有一个名为Transaction的超类,它有一个名为TransactionId的属性。必须在所有子类的构造函数中将此属性设置为某个值。
public class SubTransaction : Transaction
{
public SubTransaction() : base()
{
this.TransactionId = "IdTransaction";
}
}
我有很多这种子类。
我想做什么:使用反射加载这些SubTransactions的程序集并获取每个SubTransactions的Id设置。这可能吗?
顺便说一句,我无法实例化对象,因为我没有所需的所有信息。我完全不可能这样做。
答案 0 :(得分:3)
你可以尝试读取构造函数体的IL,但我真的不建议。
我想知道用属性装饰每个类是否更好,而是阅读它......
[TransactionId("IdTransaction")]
public class SubTransaction : Transaction
{
}
如果仍然需要,基类可以以相同的方式加载事务ID。
或者,每个类都可以声明一个常量字段,始终使用相同的名称:
public class SubTransaction : Transaction
{
public const string ConstTransactionId = "IdTransaction";
public SubTransaction() : base()
{
this.TransactionId = ConstTransactionId;
}
}
这应该很容易用反射阅读。这很丑陋,但你基本处于一个丑陋的境地......
答案 1 :(得分:0)
这是不可能的。
相反,您可以创建一个自定义属性,该属性获取ID并将其应用于每个子类。