Есть ли способ перехватить сеттеры и геттеры в C #? - PullRequest
31 голосов
/ 17 мая 2011

Как в Ruby, так и в PHP (и, я полагаю, и в других языках) есть несколько служебных методов, которые вызываются при установке свойства. (* instance_variable_set * для Ruby, * __ set * для PHP).

Итак, допустим, у меня есть класс C #, подобный этому:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Теперь, допустим, что если вызывается какой-либо установщик свойства из класса Person, я хочу сначала вызвать другой метод, а затем продолжить работу с установщиком по умолчанию, и то же самое относится и к установщикам свойств. 1011 *

Возможно ли это?


Edit: Я хочу сделать это без определения отступающего поля.

Ответы [ 11 ]

0 голосов
/ 17 мая 2011

Насколько я знаю, вы должны использовать вспомогательное поле и таким образом поместить вызов другого метода в установщик:

public class Person {
    private string firstName;
    private string lastName;

    public string FirstName {
        set { 
            DoSomeStuff();
            firstName = value;
        }
        get { return firstName; }
    }

    public string LastName { 
        set {
            DoSomeStuff();
            lastName = value;
        }
        get { return lastName; }
    }
}
...