C# get和set访问器的问题 public string Abc{get;set;}和string _Abc;public string Abc{get{return _Abc;}set{_Abc = value;}}具体有什么区别。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一个意思 通过Abc访问_Abc 我一般用对完全开放的属性都用public string Abc{get;set;}这种用法,但是我看别人的代码不管是不是完全开放都用第二种写法,我用ildasm反编译生成的代码发现其实编译完之后的代码多了 // Fields [CompilerGenerated] private string <Abc>k__BackingField;很明显,在经过编译后,默认加上了一个隐含的字段。所以,事实上,我认为public string Abc{get;set;}其实就是一种简写。但是,为什么那么多人还愿意string _Abc;public string Abc{get{return _Abc;}set{_Abc = value;}}这么用呢?是不是还有什么别的原因。 难道我会在儿这跟你讨论win95怎么用? string _Abc;public string Abc{ get{return _Abc;} set{_Abc = value;}}可能是以前vs2005写的代码。vs2008编译器支持自动属性了。 我想问一句if(a>0) a=a+1;和if(a>0){ a=a+1;}有啥区别,为啥那么多人要用第二种呢? 第一种写法(简写)某些编译器(比如Visual Studio 2003和2005?)不支持。当需要额外处理的时候,就不能简写了,要用第二种写法:string abc;public string Abc{ get{return abc;} set { if( string.IsNullOrEmpty(value) == false ) //<-- { abc = value; OnPropertyChanged(this, ...); //<-- } }} 有一定道理!那可不可以说写成string _Abc;public string Abc{ get{return _Abc;} set{_Abc = value;}}就算是一种良好的习惯呢? 微软已经将一些具体的实现封装了 所以可以直接使用get;set; 这个是看情况的,如果是我根本就知道他不会参与啥逻辑处理,现在不会以后也不会的,选择第一种如果是我自己知道,我有可能会需要一些逻辑处理的我会选择第二种实际上在vs里,这两种写法的成本代价没啥区别prop 和propfull 只是多了4个字符的代码(呵呵,时间4个字符都多不了,毕竟ide还有提示,大概只是多了1,2次上下键的代码) public string Abc{get;set;}是3.0后的自动属性,string _Abc;public string Abc{get{return _Abc;}set{_Abc = value;}}做验证时还是实用的。 求教 windows 窗口 显示原理。 二进制被截断终止 递归方法的! 求助Winform TextBox的一个问题 (winfrom)在c#中treeview控件关于checked的问题 菜鸟提问,如何获得鼠标在当前窗口的位置 DataGrid样式的问题,在线等! 有没有人做过类似浏览器地址栏的组合框啊?求教ing…… 问个初级问题,在C#中组件或着说中间件的应用只能使用COM+吗 ? new一个类后为什么其中的值变为null了 视频格式转换器,做外挂 位置参数是什么
通过Abc
访问_Abc
我一般用对完全开放的属性都用public string Abc{get;set;}这种用法,但是我看别人的代码不管是不是完全开放都用第二种写法,我用ildasm反编译生成的代码发现其实编译完之后的代码多了 // Fields
[CompilerGenerated]
private string <Abc>k__BackingField;
很明显,在经过编译后,默认加上了一个隐含的字段。所以,事实上,我认为public string Abc{get;set;}其实就是一种简写。但是,为什么那么多人还愿意string _Abc;
public string Abc
{
get{return _Abc;}
set{_Abc = value;}
}
这么用呢?是不是还有什么别的原因。
难道我会在儿这跟你讨论win95怎么用?
public string Abc
{
get{return _Abc;}
set{_Abc = value;}
}可能是以前vs2005写的代码。vs2008编译器支持自动属性了。
a=a+1;和
if(a>0)
{
a=a+1;
}
有啥区别,为啥那么多人要用第二种呢?
当需要额外处理的时候,就不能简写了,要用第二种写法:string abc;
public string Abc
{
get{return abc;}
set
{
if( string.IsNullOrEmpty(value) == false ) //<--
{
abc = value;
OnPropertyChanged(this, ...); //<--
}
}
}
有一定道理!那可不可以说写成string _Abc;
public string Abc
{
get{return _Abc;}
set{_Abc = value;}
}
就算是一种良好的习惯呢?
是3.0后的自动属性,
string _Abc;
public string Abc
{
get{return _Abc;}
set{_Abc = value;}
}
做验证时还是实用的。