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;}}做验证时还是实用的。 如何把数据传到网上,任何一台电脑都能访问 问一个ValidationExpression的问题 C#中多线程的问题 一个在C#很低级的问题,@myName和myName区别? 新手求助 ...清高手看下这段C#代码哪里有错... SqlDataAdapter如何调用存储过程? 请高手指点:c#中如何打开word文档? 刚起步 SQLCommand执行多sql语句失败。请大家帮忙看看 C#在哪些领域有应用,详细求解 视频格式转换器,做外挂 位置参数是什么
通过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;}
}
做验证时还是实用的。