积极答复者
关于简单的C#语法问题 基础雄厚的高手指教

问题
答案
-
以下的資訊說的蠻清楚的,請您參考一下,謝謝!
Properties vs. Public Variables
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
- 已建议为答案 ThankfulHeartModerator 2012年2月10日 5:22
- 已标记为答案 Leo Liu - MSFTModerator 2012年2月20日 3:19
-
property可以用来做业务控制,
举个例子,如下面的类,
public sealed class Employee {
private Int32 m_Age; // Field is now private
}Employee e = new Employee();
e.m_Age=-70;
这样明显违反逻辑的,年龄怎么可能<0呢?
如果改为下面的property的写法,则可以在property中做业务相关的控制,从而避免这种错误。
public sealed class Employee {
private Int32 m_Age; // Field is now private
public Int32 GetAge() {
return(m_Age);
}
public void SetAge(Int32 value) {
if (value < 0)
throw new ArgumentOutOfRangeException("value",value.ToString(),“The value must be greater than or equal to 0");
m_Age = value;
}
}- 已建议为答案 ThankfulHeartModerator 2012年2月10日 5:21
- 已编辑 Jacky_shen 2012年2月10日 5:27
- 已标记为答案 Leo Liu - MSFTModerator 2012年2月20日 3:19
全部回复
-
以下的資訊說的蠻清楚的,請您參考一下,謝謝!
Properties vs. Public Variables
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
- 已建议为答案 ThankfulHeartModerator 2012年2月10日 5:22
- 已标记为答案 Leo Liu - MSFTModerator 2012年2月20日 3:19
-
property可以用来做业务控制,
举个例子,如下面的类,
public sealed class Employee {
private Int32 m_Age; // Field is now private
}Employee e = new Employee();
e.m_Age=-70;
这样明显违反逻辑的,年龄怎么可能<0呢?
如果改为下面的property的写法,则可以在property中做业务相关的控制,从而避免这种错误。
public sealed class Employee {
private Int32 m_Age; // Field is now private
public Int32 GetAge() {
return(m_Age);
}
public void SetAge(Int32 value) {
if (value < 0)
throw new ArgumentOutOfRangeException("value",value.ToString(),“The value must be greater than or equal to 0");
m_Age = value;
}
}- 已建议为答案 ThankfulHeartModerator 2012年2月10日 5:21
- 已编辑 Jacky_shen 2012年2月10日 5:27
- 已标记为答案 Leo Liu - MSFTModerator 2012年2月20日 3:19
-
public class Class1{ public int Attr1=0; } public class Class2{ private int attr1=0; public int attr1{ get{return attr1;} set{attr1=value;} } }
以上代码中,Class1 和Class2哪种写法最好?为什么?我知道大家大部分会以Class2的方式去写!但Class1的写法会导致什么不好的情况吗?难道多写代码就是C#的规则吗?知道原因的回答,多谢了!
由灵
写法1语法和逻辑上是正确的。但是因为他们可以被直接访问,容易造成上下文中不对称情况产生。
比如,小学生年龄规定7~10岁,你突然赋值20岁给这个变量也可以,但是不合逻辑;
因此,属性的作用是代替了直接给变量赋值的危险,它暴露了私有变量,同时,你可以在set的时候提供if的验证功能,从而尽可能避免直接赋值带来的不安全。
【你可以】
public int attr1{ get{return attr1;} set{if (value<=xxx) {attr1=value;}else {throw new Exception("Age is invalid!");} }
QQ我:
下载MSDN桌面工具(Vista,Win7)
我的博客园
慈善点击,点击此处
- 已编辑 ThankfulHeartModerator 2012年2月10日 5:20