Отражение: получить значение свойства без создания экземпляра - PullRequest
1 голос
/ 14 сентября 2011

У меня есть суперкласс с именем Transaction, у которого есть свойство с именем TransactionId.Это свойство должно быть установлено в некоторое значение в конструкторе всех подклассов.

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

У меня много подклассов такого типа.

Что я хочу сделать: используя отражение, загрузите сборку этих субтранзакций и получите Id, установленный каждым.Это возможно?

Кстати, я не могу создать экземпляр объекта, потому что у меня нет всей информации, которая мне нужна.Это совершенно невозможно для меня.

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Ну, вы могли бы попробовать прочитать IL тела конструктора, но я бы не советовал.

Интересно, не лучше ли украсить каждый класс атрибутом и прочитать его вместо этого ...

[TransactionId("IdTransaction")]
public class SubTransaction : Transaction
{
}

Базовый класс может загружать идентификатор транзакции таким же образом, если это все еще необходимо.

Кроме того, каждый класс может объявлять постоянное поле, всегда с тем же именем:

public class SubTransaction : Transaction
{
    public const string ConstTransactionId = "IdTransaction";

    public SubTransaction() : base()
    {
        this.TransactionId = ConstTransactionId;
    }
}

Это должно быть легко читать с отражением. Это уродливо, но ты в основном в ужасной ситуации ...

0 голосов
/ 14 сентября 2011

Это невозможно.

Вместо этого вы можете создать собственный атрибут, который будет принимать идентификатор и применять его к каждому подклассу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...