自动实现的属性,内部字段名是如何约定的呢?
普通的属性,可以显示声明内部字段,但是对于自动实现的属性,没有显式的声明内部字段,可是内部字段肯定是存在的呀。
对于:
public string Lastname { get; set; }如果要在 get访问器 或是 set访问器 中写代码的话,就要引用“内部字段”名称呀。namespace ui
{
    class Class1
    {
        //下面是普通属性
        public string Firstname
        {
            get { return _Firstname; }
            set { _Firstname = value; }
        }        
        private string _Firstname;        //下面是自动实现的属性:
        public string Lastname { get; set; }
    }
}

解决方案 »

  1.   


    如果不对 get,set 访问写代码,就不用显式的指定“内部字段名”
    如果对属性 Lastname 中的get ,set 访问器写代码,是不是就必须显式的指定“内部字段名”呀?
    我的理解对吗    class Class1
        {
            private string _Firstname;
            public string Firstname
            {
                get { return _Firstname; }
                set { _Firstname = value; }
            }
            
            
            //---------------------------------------------------------------------        //如果不对 get,set 访问写代码,就不用显式的指定“内部字段名”
            //public string Lastname { get;set }
            //如果对属性 Lastname 中的get ,set 访问器写代码,是不是就必须显式的指定“内部字段名”呀?
            private string _Lastname;
            public string Lastname
            {
                get { return _Lastname; }
                set
                {
                  if (value !="" && value !=null)
                  {
                      _Lastname = value;
                  }
                } 
            }    }
      

  2.   


        class Class1
        {
            private string _Firstname;
            public string Firstname
            {
                get { return _Firstname; }
                set { _Firstname = value; }
            }
            
            
            //---------------------------------------------------------------------        //如果不对 get,set 访问写代码,就不用显式的指定“内部字段名”
            //public string Lastname { get;set }
            //如果对属性 Lastname 中的get ,set 访问器写代码,是不是就必须显式的指定“内部字段名”呀?
            private string _Lastname;
            public string Lastname
            {
                get { return _Lastname; }
                set
                {
                  if (value !="" && value !=null)
                  {
                      _Lastname = value;
                  }
                } 
            }
        }
      

  3.   

    关键是,如果在 get 或是 set 中写代码,必须要引用 “内部字段名”呀。
    我如何引用呢?
      

  4.   

    自动属性是C# 3.0中的新特性。
    以往的写法,如下:private string name;  //将敏感字段私有化
    public string Name    //提供属性,并提供get,set访问器对敏感字段进行赋值或读取
    {
      get{return name;}
      set{name = value;}
    }新写法:public string Name{get;set;}  //省略了私有字段,并get,set访问器没有实现
    这种新的写法可以比旧的方法省去2/3的代码量。
    那么,省去的代码到了哪里?
    其实,省去了代码并没有省去。
    它会在C#编译器将代码编译为MSIL的时候添加上。
    可以使用反射工具进行查看。
      

  5.   

    自动实现属性就是用在不需要在get或set里写代码用的
    如果你要在get或set里写代码,就不能用自动实现属性
      

  6.   


    如果是利用新的写法的话,对于不需要在逻辑上进行判断的字段,就可以省去了。
    直接提供属性进行访问或者读取。
    比如public string Name{get;set;}  
    //在对Name赋值或者读取的时候,会自动生成一个_Name变量,读取的操作都是针对他。
    //所以私有变量就可以忽略了。
      

  7.   

    如果使用下面这中形式,完全不用关心内部字段名称
    public string Name{get;set;}  //省略了私有字段,并get,set访问器没有实现但是如果,我对 set 访问器 写验证代码,就必须要引用内部字段名呀?
    关键是,我如何引用呢?是不是,只要需要在 set 访问器中写代码,就必须显式的指定 内部字段名 呢?

      

  8.   

    自动属性的backing field是你无法看到的,也无法引用,甚至每次编译时他的名字也可能变化
    如果在 get 或是 set 中写代码就不能使用自动属性这一特性,自动属性只能生成最简单的get/set逻辑
    形如
    public string Firstname
            {
                get { return _Firstname; }
                set { _Firstname = value; }
            }
    属性器的访问器逻辑不一定会应用到某个字段

    public string Firstname
            {
                get { return "wo"+"cao"; }
            }
    时刻记住他实质就是方法调用而已
      

  9.   

    自动属性的backing field名字每次编译是可能不一样,我们不可见不可引用
    自动属性只会帮你生成最简单的get/set逻辑
    形如 private string _Firstname;
            public string Firstname
            {
                get { return _Firstname; }
                set { _Firstname = value; }
            }
    要实现自己的get/set逻辑,不能使用自动属性