C# get和set访问器的问题

Shalves 2011-01-06 03:01:47

public string Abc{get;set;}



string _Abc;
public string Abc
{
get{return _Abc;}
set{_Abc = value;}
}


具体有什么区别。
...全文
195 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2011-01-06
  • 打赏
  • 举报
回复
因为调用时,对字段和属性的访问方式不同。所以微软推荐用属性,为了简化书写,所以有了自动属性。尽量多的使用自动属性是好事。
wangchangming 2011-01-06
  • 打赏
  • 举报
回复
public string Abc{get;set;}
是3.0后的自动属性,
string _Abc;
public string Abc
{
get{return _Abc;}
set{_Abc = value;}
}
做验证时还是实用的。
baysos 2011-01-06
  • 打赏
  • 举报
回复

蹭蹭分·因为实在不知道说什么好 LZ行行好把……
wanghui0380 2011-01-06
  • 打赏
  • 举报
回复
这个是看情况的,如果是我根本就知道他不会参与啥逻辑处理,现在不会以后也不会的,选择第一种

如果是我自己知道,我有可能会需要一些逻辑处理的我会选择第二种

实际上在vs里,这两种写法的成本代价没啥区别

prop 和propfull 只是多了4个字符的代码(呵呵,时间4个字符都多不了,毕竟ide还有提示,大概只是多了1,2次上下键的代码)
lychenzi 2011-01-06
  • 打赏
  • 举报
回复
一个只读,一个可读可取
hitlcyu19 2011-01-06
  • 打赏
  • 举报
回复
微软已经将一些具体的实现封装了 所以可以直接使用get;set;
Shalves 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 gomoku 的回复:]
引用 11 楼 shalves 的回复:
...
算是一种良好的习惯呢?

倒不见的是。
既然编译器提供了便利,没道理不用简写。而且还有代码更容易读的好处。
[/Quote]

都对,就是仁者见仁智者见智了。
Shalves 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gomoku 的回复:]
第一种写法(简写)某些编译器(比如Visual Studio 2003和2005?)不支持。
当需要额外处理的时候,就不能简写了,要用第二种写法:


C# code
string abc;
public string Abc
{
get{return abc;}
set
{
if( string.IsNullOrEmpty(value) == false……
[/Quote]

要额外处理的话肯定是这样的。

看来在新环境下,两者是没有本质区别的了。准备结贴了!!!
gomoku 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 shalves 的回复:]
...
算是一种良好的习惯呢?
[/Quote]
倒不见的是。
既然编译器提供了便利,没道理不用简写。而且还有代码更容易读的好处。
Shalves 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wanghui0380 的回复:]
实际上是原因是

对于if
1 语义清楚
2 以后修改成多行语句块,也很明确,不用多费代码

对于你的属性
1。语义明确
2。 现在是用不需要逻辑支持的自动属性,但是如果是以后需要修改成需要逻辑支持的自动属性呢?
[/Quote]

有一定道理!那可不可以说写成

string _Abc;
public string Abc
{
get{return _Abc;}
set{_Abc = value;}
}
就算是一种良好的习惯呢?
gomoku 2011-01-06
  • 打赏
  • 举报
回复
第一种写法(简写)某些编译器(比如Visual Studio 2003和2005?)不支持。
当需要额外处理的时候,就不能简写了,要用第二种写法:

string abc;
public string Abc
{
get{return abc;}
set
{
if( string.IsNullOrEmpty(value) == false ) //<--
{
abc = value;
OnPropertyChanged(this, ...); //<--
}
}
}
wanghui0380 2011-01-06
  • 打赏
  • 举报
回复
实际上是原因是

对于if
1 语义清楚
2 以后修改成多行语句块,也很明确,不用多费代码

对于你的属性
1。语义明确
2。 现在是用不需要逻辑支持的自动属性,但是如果是以后需要修改成需要逻辑支持的自动属性呢?
Shalves 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wanghui0380 的回复:]
我想问一句

if(a>0)
a=a+1;


if(a>0)
{
a=a+1;
}
有啥区别,为啥那么多人要用第二种呢?
[/Quote]

也许个人喜好是一种原因。
wanghui0380 2011-01-06
  • 打赏
  • 举报
回复
我想问一句

if(a>0)
a=a+1;


if(a>0)
{
a=a+1;
}
有啥区别,为啥那么多人要用第二种呢?
兔子-顾问 2011-01-06
  • 打赏
  • 举报
回复
string _Abc;
public string Abc
{
get{return _Abc;}
set{_Abc = value;}
}


可能是以前vs2005写的代码。vs2008编译器支持自动属性了。
Shalves 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dobzhansky 的回复:]
不说c#版本的话, 这个题目是个破题
[/Quote]

难道我会在儿这跟你讨论win95怎么用?
Shalves 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ssp2009 的回复:]
没区别,一个意思。
[/Quote]

我一般用对完全开放的属性都用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;}
}
这么用呢?是不是还有什么别的原因。
Dobzhansky 2011-01-06
  • 打赏
  • 举报
回复
不说c#版本的话, 这个题目是个破题
wangderong8389945 2011-01-06
  • 打赏
  • 举报
回复
一个意思
通过Abc
访问_Abc
快溜 2011-01-06
  • 打赏
  • 举报
回复
没区别,一个意思。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧