反思:获取属性值而不实例化

时间:2011-09-14 17:13:29

标签: .net reflection

我有一个名为Transaction的超类,它有一个名为TransactionId的属性。必须在所有子类的构造函数中将此属性设置为某个值。

public class SubTransaction : Transaction
{
    public SubTransaction() : base()
    {
        this.TransactionId = "IdTransaction";
    }
}

我有很多这种子类。

我想做什么:使用反射加载这些SubTransactions的程序集并获取每个SubTransactions的Id设置。这可能吗?

顺便说一句,我无法实例化对象,因为我没有所需的所有信息。我完全不可能这样做。

2 个答案:

答案 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并将其应用于每个子类。