日期:2014-05-18 浏览次数:20862 次
class a { public int aValue { get; set; } }
------解决方案--------------------
class a { public int aValue; } => class a { int aValue { get; set; } }
------解决方案--------------------
问题可以这样描述
我是一个“人”我有一个“谓”
我的“谓”没天都要给他“赋值”
我的“口”是我开放出来的
如果你要想给我的“谓”“赋值”,那么就要通过我开放出来的“口”
也就是说我要吃包子,你给我鲍鱼,那么这时候我的“口”就吧你拒绝了。
------解决方案--------------------
考虑到像实现INotifyPropertyChanged接口这样的问题(这个你迟早会碰到),“笨”的语法还是有应用场合的。
没这种要求的话,public string Name { get; set; }是最简单的表达方式了。
MEF中还有种语法
[Export]
class a
{
[Import]
public int aValue;
}
嘿嘿,也够简单了吧?
------解决方案--------------------
其实 get set 是语法糖,最后转化为
get_属性名 和 set_属性名 两个方法。
严格地说,直接暴露公开成员变量的做法是违反OO原则的。
一个对象的状态应该由它内部去改变。
况且C#的设计者考虑到了语法的复杂性,已经提供了更简单的写法。所以直接public出成员变量的做法应该彻底摈弃。
学习语言绝对不是把它的语法走一遍,并且以发现这种语言还能如何如何写为能事。多了解语言的设计意图,比如C#是面向对象的语言,那么应该理解面向对象是什么。
------解决方案--------------------
public int A;
A 仅仅是类中的字段 field 不能称之为属性 property
而属性是具有 get 和 set 访问器的,也可以看成是一种保护
比如 A 的值需要进行限制时(-100 < A < 100),情况就不一样啦
private int a = 0;
public int A
{
get { return a; }
set { if (...) a = value; }
}
而且通过访问器,可以判断出属性值是否发生了变更,从而触发对应的事件,例如 TextChanged
private string _Text = "";
public string Text
{
set {
if(_Text != value) {
_Text = value;
触发对应事件; }
}
}
------解决方案--------------------
在字段当中我们一般就是将他封装在属性中进行调用,这样很给力,如果以后的编程方法中用到此字段又不需要进行其他方法的引用,我们就可以将它封装,其实你的那种方法不太好,老实说,你的方法如果初相在编译状态下会出现BUG,这可能在以后的代码维护阶段会出现问题!
------解决方案--------------------
你的写法是很符合规范的,只不过繁琐一点罢了!
------解决方案--------------------