关于C# get set 的问题 本帖最后由 Lolo_cs_dn 于 2011-06-27 10:11:52 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 都可以,roomNo是供外部调用的_roomNo 是私有的,只有在类的内部可见 如果在同一个类或者其子类里面都可以调用的如果在其他类里面且不继承该类你就只能调用roomNo原因_roomNo 的访问修饰符是protected 一般情况下建议直接在本类里面直接调用 _roomNo (速度快,虽然这种速度优势几乎可以忽略)还有有时候你可能在 get {逻辑 等 return _roomNo; } set { _逻辑等roomNo = value; 逻辑等}添加逻辑代码那么就更加不一样了 Class a { protected string _roomNo = string.Empty; //房间号,内部字段,供你的类Class a内部使用 public string roomNo { get { return _roomNo; } //get返回值是内部字段_roomNo set { _roomNo = value; } //set设置内部字段 _roomNo }所以,_roomNo是类的字段,供类使用,而roomNo供类的实例或者调用时使用 习惯上就把_roomNo 定义为私有,在内部访问_roomNo ,外部则访问属性。如果情况如二楼所说,则要根据实际情况而定了 刚看到2楼的回复,非常感谢 我本来也是这样的想法但看到vs2008的 public string Name { get; set; }这种写法,就有点奇怪,如果这样写了,那是不是当前类里也只能是调用这个public string Name1. 是不是提倡这种写法,也就是类内也调用这个public string Name2. 如果就像2楼说的,get; set;里面有复杂的判断,那效率怎么办 public string Name { get; set; }这种情况,在编译时会自动为该类加一个内部的私有对象如果在get,set中有逻辑判断,就需要在类内部显式声明私有对象,然后在get,set中处理,至于引用public的还是私有的,视具体情况而定 建议属性名称都用大写字母开头RoomNo public string Name { get; set; }我理解在编译时会自动为该类加一个内部的私有对象我的意思是这样写 意味着类内部也只能调用这个public的 而系统提供这样的功能是不是提倡内部外部都调用这个public的 *****************整理了一下 重新提问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 Name2. 如果就像2楼说的,get; set;里面有复杂的判断,那效率怎么办 1.VS提供的public string Name{get;set;}这种写法,只是为了提高IDE的易用性,它和public string Name{get{return _Name;}set{_Name=value;}}是相同的2.如果get,set由复杂判断,那么这个判断应该也是对外部来说的,是对外部写入或读出数据进行处理,因此,在类的内部仍然建议使用_Name这样的私有成员 没什么,.net framework 3.5的新特性,支持这种语法,和你上面写的是一样的。。 从楼主提供的代码来看,都可以。因为roomNO字段并没有在属性中进行赋值的逻辑判断。也就是说该字段不是一个敏感字段。假如说,一个敏感字段的话,建议楼主还是从属性过滤一遍的好。 学习了。 这种c#机制,感觉还是好用的。在get set 可以加逻辑代码。 内部访问_roomNo ,外部用类的实例访问 roomNo 内部用_roomNo ,外部用roomNo ASP.NET,后台弹出提示框,页面不刷新 c#之后该怎么学? 判断 数组 的长度 【【【一条if语句】】】 现在有成熟的中文自动文摘(摘要系统)吗 登录窗口登陆成功但是进入主窗口打开后登录窗口不关闭怎么回事 关于文件上传 请有c# 做的短信网站平台源码? 字符串转2进制 / 2进制转回字符串河解 tabcontrol的问题 ASP.NET C# 表格边框问题 数据库查询,急 ,在线等 急急急
roomNo是供外部调用的
_roomNo 是私有的,只有在类的内部可见
你就只能调用roomNo原因_roomNo 的访问修饰符是protected
一般情况下建议直接在本类里面直接调用 _roomNo (速度快,虽然这种速度优势几乎可以忽略)还有有时候你可能在
get {逻辑 等 return _roomNo; }
set { _逻辑等roomNo = value; 逻辑等}
添加逻辑代码
那么就更加不一样了
protected string _roomNo = string.Empty; //房间号,内部字段,供你的类Class a内部使用
public string roomNo
{
get { return _roomNo; } //get返回值是内部字段_roomNo
set { _roomNo = value; } //set设置内部字段 _roomNo
}所以,_roomNo是类的字段,供类使用,而roomNo供类的实例或者调用时使用
我本来也是这样的想法
但看到vs2008的 public string Name { get; set; }
这种写法,就有点奇怪,如果这样写了,那是不是当前类里也只能是调用这个public string Name1. 是不是提倡这种写法,也就是类内也调用这个public string Name
2. 如果就像2楼说的,get; set;里面有复杂的判断,那效率怎么办
这种情况,在编译时会自动为该类加一个内部的私有对象
如果在get,set中有逻辑判断,就需要在类内部显式声明私有对象,然后在get,set中处理,至于引用public的还是私有的,视具体情况而定
RoomNo
我理解在编译时会自动为该类加一个内部的私有对象我的意思是这样写 意味着类内部也只能调用这个public的 而系统提供这样的功能是不是提倡内部外部都调用这个public的
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;里面有复杂的判断,那效率怎么办
这种写法,只是为了提高IDE的易用性,它和public string Name{get{return _Name;}set{_Name=value;}}是相同的
2.如果get,set由复杂判断,那么这个判断应该也是对外部来说的,是对外部写入或读出数据进行处理,因此,在类的内部仍然建议使用_Name这样的私有成员
没什么,.net framework 3.5的新特性,支持这种语法,和你上面写的是一样的。。
因为roomNO字段并没有在属性中进行赋值的逻辑判断。也就是说该字段不是一个敏感字段。假如说,一个敏感字段的话,建议楼主还是从属性过滤一遍的好。