今天在看asp.net mvc3.0的入门教程看到里面的实体类的属性是这么写的
   public int ID { get; set; } 
    public string Title { get; set; } 
    public DateTime ReleaseDate { get; set; } 
    public string Genre { get; set; } 
    public decimal Price { get; set; } 弱弱的问一句,这是.NET4.0新特性吗???如果给属性赋值,这值存在哪啊 ??因为我习惯这样写private  int _id;
public int ID{get{return _id;}set{_id=value;}

解决方案 »

  1.   

    忘了是从C# 3.0还是C# 3.5开始起出现的一种简单的写法了。但是即使你用的.Net Framework是2.0,只要你是在用Visual Studio 2008或更高的版本,你的IDE和编译器是识别这样的写法的。因为这个东西在本质上来说只是个语法糖(Syntactic sugar)而已。
      

  2.   


    还想问一句,如果这样写 public string Genre { get; }   ,那岂不是在一个类的内部无法给这个属性赋值了?
      

  3.   


    如果你要在类的内部给它赋值,但是你又不想让这个类外部的调用者来赋这个值,那么你可以这样定义:
    public string Genre { get; private set; }你看,这样写真的是很优雅,而且访问控制做得很好。
      

  4.   


    你的这种比较“古典”的写法,其实也是很好处的,好处在哪里呢?在于设定一个属性的初始值(默认值)。
    比如:private int _id = 5;
    public int ID
    {
        get { return this._id; }
        set { this._id = value; }
    }
    而那种比较新颖的写法public int ID { get; set; }就无法在这里指定初始值(默认值),只能在类初始化里面显式地设定初始值。
    另外,那种“古典”的写法还常常可以这样用:private List<CyclePoint> points = null;public List<CyclePoint> Points
    {
        get
        {
            if(this.points == null)
            {
                this.points = new List<CyclePoint>();
            }        return this.points;
        }
    }
    这也是很常见的一种优雅的做法。