1.C#中属性实际是一种方法,如果Java中没有字段而是直接对用方法获取字段(Java中称为属性)
如下是一个Test的例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
static void Main(string[] args)
{
}
}
//要测试的类
public class Test
{
//属性
public string James { set; get; }
//字段
public int x;
}
}
编译后,我们用Visual Studio 2010查看这两个类的中间代码为:
对比如下
C#代码 中间语言代码:
public string James { set; get; } get_James:string() 方法
set_James:Void(string) 带参方法
<James>K_BackingField: private string 编译器自动生成的字段 (待会继续对比,是否是字段)
结论:1.属性是方法 2.声明属性,编译器会自动生成相应的字段
public int x; x:public int 32
可以看出,编译器根据属性自动生成的字段代码不同于编译器根据字段生成的代码,编译器会在自动生成的字段属性上做一些修饰如<James>K_BackingField: