C# 属性和字段 get set
来源:互联网 发布:立项依据怎么写 知乎 编辑:程序博客网 时间:2024/04/27 03:43
做了一年的asp.net的开发了,最近有一个疑问,在项目中经常用到实体类,每次写get set ,我就有点不理解了,是不是吃多了没事情做,何必不把字段设置成public就行了,下面做了一个实验
class Program { static void Main(string[] args) { Entity n = new Entity(); n.Name = "houwc1"; Entity2 n2 = new Entity2(); n2.Name = "houwc2"; Entity3 n3 = new Entity3(); n3.Name = "houwc3"; Console.WriteLine(n.Name); Console.WriteLine(n2.Name); Console.WriteLine(n3.Name); Console.ReadKey(); //结果 代码能够正常的运行 //houwc1 //houwc2 //houwc3 } } public class Entity { public string Name; public int Age; } public class Entity2 { //这种代码的快捷键是 prop + tab + tab VS 自动创建 get set public string Name { get;set;} public int Age { get; set; } } public class Entity3 { private string name; public string Name { get { return name; } set { name = value; } } private string age; public string Age { get { return age; } set { age = value; } } }
我用了3种方式去创建实体类的字段,第一种当然是我最喜欢的直接给类的字段加 public 了,然而 第二种,是.net3.5出来的一种语法(大家都叫做程序员你的语法糖),第3种就是我的老大(以前工作在微软)经常用到的一种方式,我个人认为他估计是以前用 .net2.0的时候养成的习惯,其实第二种 方式(C#语法糖) 编译之后的结果也和第3种一样的,这个可以用反编译软件可以看得到,那么在写 Entity3的时候,我发现,name是类的一个字段,用来保存数据的,那么 Name究竟是什么呢,最后我发现一个问题,在n.name的时候 ,点出来的 name 判断是一个字段的图标 ,然而 n3点出来的Name左边确实一个属性的图标(扳手的小图标---属性),Entity2的实例 n2点出来的name也是属性的图标,然而我个人觉得,只要用{}( 前面没有() )的都是属性,名称后面带 () 的就是方法;那么微软为什么要不推荐直接用public,我也去了解了一下,
1 直接用public违背了 C# oop 编程的 封装 ,所有的基类都不希望派生类去直接访问我的数据
2 可以控制数据的范围,属性就相当于保安,要检查一下,比如 如果age赋值为负数
try { Entity4 n4 = new Entity4(); n4.Age = -100; } catch { Console.WriteLine("我抓到了一个脑残"); } Console.ReadKey(); } public class Entity4 { private int age; public int Age { get { return age; } set { if(value<0) { //抛出异常 throw new Exception("这个值很脑残"); } else { age = value; } } } } }
这里给年龄赋一个负的值,显然不合理
3 可以控制只读或者只写 (只用get 或者只用set)
写了这么多,最后什么时候用哪种方式呢,我觉得写哪种都可以,如果你要在赋值或者取值的时候有限定,你可以采用 entity3的方式,第一种我个人一般也不用,我一般用Entity2的这种,也是微软推荐的,至于为什么不用第一种,我也是很无奈,至少我个人觉得第一种和第二种完全没区别。至少微软也没有给一个我们一个很有道理的说法!
- C# 属性和字段 get set
- C# get和set属性
- C#封装:关于字段属性的get和set方法的小总结
- C# GET 和 SET属性作用
- C# get;set;属性。
- C#——关于属性字段中的set和get
- c# get和set
- C# get和set
- 浅析C# get set用法(属性声明和访问)
- c#属性中get和set的作用
- C#中属性 get和set访问器
- C#属性访问器 get set,和java比较学习
- C#中的get和set有什么用 声明属性
- C#中的字段封装(set, get)
- 属性,简化get和set
- c# 字段和属性
- C#属性和字段
- C# 属性和字段
- QListWidget实现图片缩略图形式的列表
- Day02笔记
- Extjs4 源码分析系列一 类的创建过程
- JAVA之ConcurrentHashMap源码深度分析
- ant.xml文件
- C# 属性和字段 get set
- 分布式网站架构后续:zookeeper技术浅析
- drools入门(二)-----规则引擎Drools解决汽水问题(复杂逻辑)
- LeetCode 8 String to Integer (atoi)
- python getopt使用
- ALM损坏后的恢复步骤
- 初次使用keepalived应该注意的
- ListView.addHeadView添加ViewPager,ViewPager左右切换影响ListView上下滑动
- PHP生成静态页面详细教程