Edg*_*lez 31 c# interceptor getter-setter
在Ruby和PHP(我猜其他语言)中,只要设置了属性,就会调用一些实用程序方法.(*instance_variable_set*表示Ruby,*__ set*表示PHP).
所以,假设我有一个像这样的C#类:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,假设如果Person调用类中的任何属性设置器,我想先调用另一个方法,然后继续使用setter的默认行为,这同样适用于属性setter.
这可能吗?
编辑: 我想在不定义支持字段的情况下执行此操作.
Mar*_*ell 28
不一般; 但有几个选择;
Ode*_*ded 14
可以直接在属性体中进行,但是您需要使用适当的后备字段而不是自动实现的属性.
private string firstName;
public string FirstName
{
get { return firstName;}
set
{
if(check(value))
{
firstName = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使使用自动实现的属性,您也会获得一个支持字段 - 这是由编译器生成的,您无法直接访问它.
编辑:
看到你不需要支持字段,你还有其他选择 - 使用PostSharp之类的AOP工具可以帮助你.