反射:无需实例化即可获取属性值



我有一个名为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,并将其应用于每个子类。

相关内容

  • 没有找到相关文章

最新更新