问题描述
- C#封装字段问题:两者的区别
-
(1) private int a;public int A { get { return a; } set { a = value; } } (2) public int a { get; set; }
这两者分别什么意思?有什么区别?
解决方案
从表面上没啥区别,当你访问这个类时,
public int A
{
get { return a; }
set { a = value; }
}
只能通过类.A
而
public int a { get; set; }
通过类.a即可
public string a { get; set; }
和公有字段没多大区别了,没啥意义,建议用第一种方法。但是从面向对象的角度来讲,公开的是方法,而不是字段。而且微软也推荐:所有的字段都设置为私有字段,如果要使用它们,则把它们封装成属性。对于这样简单的set或get,编译器会自动进行inline处理,没有函数进出栈的性能损失。
解决方案二:
第一种,是有一个显示声明的变量a
第二种,系统会自己声明一个匿名变量返回
解决方案三:
没什么区别,第二种是第一种的简略形式。
为了符合微软的规范(当然不是强求),应写成
public int A { get; set; }
解决方案四:
如果对a没有特殊要求的话,两种都没问题,但如果需要封装一些判断,或则其他什么操作,最好使用第一种。
解决方案五:
下面的是高版本的.net framework的语法糖,和第一种写法效果是一样的,私有变量编译器创建。
解决方案六:
C#3推出了自动属性这个语法糖,编译器帮我们做了更多的工作,这两种写法的效果是一样的,只是自动属性的写法更加简洁。
时间: 2024-12-06 06:44:11