以往,在C#中,property的实现类似这样: public class Point { private int x; private int y; public int X { set { x = value; } get{ return x; } } public int Y { set { y = value; } get { return y; } } } 两种方式通过编译后生成的IL是一样的。 由于这样的代码有一定的类似性和重复性,为了提高编码的效率,以上功能可以用以下方式实现: public class Point { public int X { get; set; } public int Y { get; set; } } 在代码过程中,我们经常会用到set, get,特别是wpf的推出,更是将get, set用得更加频繁。在wpf中,将控件的数据绑定与model的联系就是通过get来实现的,这就很好的实现了MVVP的架框,降低了耦合性。 但是我们也要注意到get, set 是很邪恶的,get,set将类内部的数据暴露给了外部,外界可以取值,可以赋值,这和封装的思想是背离的。当外界通过get方式取得数据后再进行处理时,我们也要考虑为什么这部分功能是在类的外面,为什么不将行为和数据放在一起,有没有可能是犯了feature envy的错误。 field和property的最大区别在于field不可以含有方法,而property是可以有处理的方法的。但是在get, set中添加数据处理,这可能又是一个错误,get,set是用于取值赋值的,现在又添加了数据处理的功能,这会不会是违反了单一职责原则。 所以,在使用get, set时,需要谨慎使用,不可滥用。三思而后用。
转载于:https://www.cnblogs.com/penghong/archive/2010/04/15/1713000.html