Как вы можете переопределить свойство, используя в отражении в C #? - PullRequest
0 голосов
/ 01 декабря 2009

Предположим, у нас есть следующий класс:

public class tx_fct
{

    int _ok;

    public int ok 
    {
        get
        {
            return _ok;
        }
        set
        {
            _ok = value;
        }
    }
}

Как я могу переопределить геттер, используя отражение?

Кажется, что геттер не находится в tx_fct1.ok.GetType().GetMethods().

Когда я получаю доступ к геттеру, как мне вставить свой собственный код геттера?

Ответы [ 2 ]

4 голосов
/ 01 декабря 2009

Reflection API предоставляет только методы для создания классов и методов, но не изменяет существующие. Невозможно изменить существующий метод во время выполнения. Все, что вы можете сделать, это вставить какой-либо IL в сборку, которая еще не была загружена в домен приложений.

2 голосов
/ 01 декабря 2009

В основном вам потребуется наследование:

public class tx_fct {
    int _ok;
    public virtual int ok {
        get { return _ok; }
        set { _ok = value; }
    }
}
class custom_fct : tx_fct {
    public override int ok {
        get {
            Console.WriteLine("get");
            return base.ok;
        }
        set {
            Console.WriteLine("set");
            base.ok = value;
        }
    }
}

Обратите внимание, что вы можете создавать подклассы во время выполнения, используя AssemblyBuilder, TypeBuilder и т. Д., Но это не весело и должно быть зарезервировано для тех случаев, когда это абсолютно необходимо.

...