首页 新闻 搜索 专区 学院

关于C#自动属性

0
[已解决问题] 解决于 2011-09-02 15:55

View Code
1 public class TableInfo
2 {
3 // Fields
4 private string _tabDate;
5 private string _tabName;
6 private string _tabType;
7 private string _tabUser;
8
9 // Properties
10 public string TabDate { get; set; }
11 public string TabName { get; set; }
12 public string TabType { get; set; }
13 public string TabUser { get; set; }
14 }
View Code
1 public class TableInfo
2 {
3 // Properties
4 public string TabDate { get; set; }
5 public string TabName { get; set; }
6 public string TabType { get; set; }
7 public string TabUser { get; set; }
8 }
我想知道这两种赋值方式有什么区别。

private string _tabName;

public string TabName { get; set; }

nil的主页 nil | 小虾三级 | 园豆:669
提问于:2011-09-02 13:13
< >
分享
最佳答案
0

类的字段是通过属性来访问的;通过属性可以控制该字段的读写情况,更加安全;其次,自动属性这个是C#的语言特性,跟语法是没关系的,就相当于内部帮你做好了,但是界面上面没有显示罢了;如:

 

View Code
class person1
{
private string _name;
private int _age;

public String Name
{
get { return _name; }
set { _name = value; }
}
public int Age
{
get { return _age; }
set { _age = value; }
}
}

 跟

class person2
{

public String Name { get; set; }

public int Age { get; set; }

}

这两个类,后面是自动属性的,在编译为il的时候 再看两个类的信息:

不好意思,这里不会用这个编辑器插入图片,见谅啊,用il dasm 工具查看

person1的字段_age是常规的 .field private int32 _age

这个时候person2也生产了一个对应的字段哦(根据属性) .field private int32 '<Age>k__BackingField'   C#编译器为这个类自动生成的一个字段,应该可以说明问题了吧 呵呵

Devin Mao | 小虾三级 |园豆:596 | 2011-09-02 15:04

嗯,我写了两个类测试了一下,il 反汇编程序,又学到一个新东西。il Dasm 好东西啊!

1 public class Class1
2 {
3 private string _Name;
4
5 public string Name
6 {
7 get { return _Name; }
8 set { _Name = value; }
9 }
10 }
11
12 public class Class2
13 {
14 public string Name { get; set; }
15 }
下面这个是编译的exe文件

C# 自动属性生成的微软中间语言

插入图片我刚找到,在写博客那个地方,有一个相册,先把图片上传到相册,然后再引用相册的地址就行了,我测试的结果和你的一样。

nil | 园豆:669 (小虾三级) | 2011-09-02 15:51
其他回答(1)
1

这两种写法是一样的,第一种下面这几个没有用到,是多余的

// Fields
4 private string _tabDate;
5 private string _tabName;
6 private string _tabType;
7 private string _tabUser;

artwl | 园豆:16536 (专家六级) | 2011-09-02 13:21

忘了说一下了,第一种真正的赋值对象是带下划线的,第二种赋值对象就是他们本身,只实现简单的读写功能的自动属性,和直接通过自动属性操作字段,有什么区别,我知道,这两种方法实现的功能是一样的,只是发起者不一样,我想知道他们有什么区别

支持(0) 反对(0) nil | 园豆:669 (小虾三级) | 2011-09-02 13:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册