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