关于C# get set 的问题

FlyLolo
全栈领域优质创作者
博客专家认证
2011-06-27 10:06:16
Class a {
protected string _roomNo = string.Empty; //房间号

public string roomNo
{
get { return _roomNo; }
set { _roomNo = value; }
}

private void ClearRoom()
{
这里想调用房间号,是用 _roomNo 还是 roomNo? 请重点说一下为什么
}

}
...全文
357 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
root0123 2011-12-10
  • 打赏
  • 举报
回复
内部用_roomNo ,外部用roomNo
lgf11088 2011-10-27
  • 打赏
  • 举报
回复
内部访问_roomNo ,外部用类的实例访问 roomNo
FlyLolo 2011-06-27
  • 打赏
  • 举报
回复
*****************整理了一下 重新提问
Class a {
protected string _roomNo = string.Empty; //房间号

public string roomNo
{
get { return _roomNo; }
set { _roomNo = value; }
}

private void ClearRoom()
{
这里想调用房间号,是用 _roomNo 还是 roomNo? 请重点说一下为什么
}

}



*********************下面是2楼说的 非常赞同
如果在同一个类或者其子类里面都可以调用的。。。

如果在其他类里面且不继承该类
你就只能调用roomNo

原因_roomNo 的访问修饰符是protected


一般情况下建议直接在本类里面直接调用 _roomNo (速度快,虽然这种速度优势几乎可以忽略)

还有有时候你可能在
get {。。。逻辑 等 return _roomNo; }
set { _。。。逻辑等roomNo = value; 。。。逻辑等}
添加逻辑代码
那么就更加不一样了



****************************

非常赞同2楼说的 ,认为这样很好
但vs2008 提供了public string Name { get; set; }
这种方式,自动生成了私有的 私有无法调用

那样内部也只能调用public的

如果这样
1. 提供这样的写法是不是提倡类内也调用这个public string Name
2. 如果就像2楼说的,get; set;里面有复杂的判断,那效率怎么办
小阳 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lolo_cs_dn 的回复:]
public string Name { get; set; }
我理解在编译时会自动为该类加一个内部的私有对象

我的意思是这样写 意味着类内部也只能调用这个public的

而系统提供这样的功能是不是提倡内部外部都调用这个public的
[/Quote]
恩,是的,内部外部都可以调用,因为你这个是公共的!
FlyLolo 2011-06-27
  • 打赏
  • 举报
回复
public string Name { get; set; }
我理解在编译时会自动为该类加一个内部的私有对象

我的意思是这样写 意味着类内部也只能调用这个public的

而系统提供这样的功能是不是提倡内部外部都调用这个public的
路人甲cw 2011-06-27
  • 打赏
  • 举报
回复
建议属性名称都用大写字母开头
RoomNo
zhgroup 2011-06-27
  • 打赏
  • 举报
回复
public string Name { get; set; }
这种情况,在编译时会自动为该类加一个内部的私有对象
如果在get,set中有逻辑判断,就需要在类内部显式声明私有对象,然后在get,set中处理,至于引用public的还是私有的,视具体情况而定
criedshy 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lolo_cs_dn 的回复:]

刚看到2楼的回复,非常感谢
我本来也是这样的想法
但看到vs2008的 public string Name { get; set; }
这种写法,就有点奇怪,如果这样写了,那是不是当前类里也只能是调用这个public string Name

1. 是不是提倡这种写法,也就是类内也调用这个public string Name
2. 如果就像2楼说的,get; set;里面有复杂……
[/Quote]

你可以看一下中间代码,它是加了一个隐藏的私有变量

#2 这个是另当别论
FlyLolo 2011-06-27
  • 打赏
  • 举报
回复
刚看到2楼的回复,非常感谢
我本来也是这样的想法
但看到vs2008的 public string Name { get; set; }
这种写法,就有点奇怪,如果这样写了,那是不是当前类里也只能是调用这个public string Name

1. 是不是提倡这种写法,也就是类内也调用这个public string Name
2. 如果就像2楼说的,get; set;里面有复杂的判断,那效率怎么办
wb1125 2011-06-27
  • 打赏
  • 举报
回复
习惯上就把_roomNo 定义为私有,在内部访问_roomNo ,外部则访问属性。如果情况如二楼所说,则要根据实际情况而定了
isjoe 2011-06-27
  • 打赏
  • 举报
回复
内部用_roomNo
FlyLolo 2011-06-27
  • 打赏
  • 举报
回复
功能上肯定是都可以取到或者修改值,
我菜鸟 想问一下
习惯上怎么写 或者说应该有类似不成文的标准
yalan 2011-06-27
  • 打赏
  • 举报
回复
Class a {
protected string _roomNo = string.Empty; //房间号,内部字段,供你的类Class a内部使用

public string roomNo
{
get { return _roomNo; } //get返回值是内部字段_roomNo
set { _roomNo = value; } //set设置内部字段 _roomNo
}

所以,_roomNo是类的字段,供类使用,而roomNo供类的实例或者调用时使用
loveheye 2011-06-27
  • 打赏
  • 举报
回复
顶2楼
mrsupersky 2011-06-27
  • 打赏
  • 举报
回复
如果在同一个类或者其子类里面都可以调用的。。。

如果在其他类里面且不继承该类
你就只能调用roomNo

原因_roomNo 的访问修饰符是protected


一般情况下建议直接在本类里面直接调用 _roomNo (速度快,虽然这种速度优势几乎可以忽略)

还有有时候你可能在
get {。。。逻辑 等 return _roomNo; }
set { _。。。逻辑等roomNo = value; 。。。逻辑等}
添加逻辑代码
那么就更加不一样了


zhgroup 2011-06-27
  • 打赏
  • 举报
回复
都可以,
roomNo是供外部调用的
_roomNo 是私有的,只有在类的内部可见
天外来客-007 2011-06-27
  • 打赏
  • 举报
回复
在类内一般使用私有变量,外部访问使用属性!
可以看看相关的编码规范!
xwh0318 2011-06-27
  • 打赏
  • 举报
回复
学习了
IT小小鸟 2011-06-27
  • 打赏
  • 举报
回复
学习了。 这种c#机制,感觉还是好用的。在get set 可以加逻辑代码。
remember_me 2011-06-27
  • 打赏
  • 举报
回复
从楼主提供的代码来看,都可以。
因为roomNO字段并没有在属性中进行赋值的逻辑判断。也就是说该字段不是一个敏感字段。

假如说,一个敏感字段的话,建议楼主还是从属性过滤一遍的好。
加载更多回复(4)

110,532

社区成员

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

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

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