道具和完整财产之间有什么区别?

16 c# properties

嗨伙计们下面的两段代码有什么区别吗?或者顶部只是底部的一个简短形式?

public string Name{get;set;}
Run Code Online (Sandbox Code Playgroud)

 private string _Name;
        public string Name
        {
            get { return _Name; }
            set { _Name=value;  }
        }
Run Code Online (Sandbox Code Playgroud)

Eri*_* J. 11

唯一的区别(除了你必须在类构造函数中使用"默认名称"进行初始化的事实)是_Name将在类本身中可见.有一个风险,类会在内部引用_Name而不是Name,一切都会正常工作,并且在稍后的某个时间点你会添加一些逻辑给Name,因为你在类中使用了_Name而不会被调用.

例:

private string _Name = "Default Name";
public string Name
{
   get { return _Name.Left(42); }  // Changed the getter
   set { _Name = value; }
}

void MyOtherMethod()
{
   string foo = _Name; // Referencing the private field accidentally instead of the public property.
   // Do something with foo
}
Run Code Online (Sandbox Code Playgroud)


San*_*alp 5

两种属性方法的基本行为和目的几乎相同。但主要区别在于实施。和...之间的不同

public string Name{get;set;}
Run Code Online (Sandbox Code Playgroud)

 private string _Name;
        public string Name
        {
            get { return _Name; }
            set { _Name=value;  }
        }
Run Code Online (Sandbox Code Playgroud)

是如果您使用简短的属性语法(在框架 3.0 或更高版本中引入),则属性字符串永远不会被初始化,即如果您在任何地方直接使用“Name”属性而不为其设置值,它将返回一个 NULL 值。但是如果你使用第二种语法来初始化属性值,它会返回一个 EMPTY 字符串,因为当你初始化一个字符串时,它被初始化为一个 EMPTY 值而不是 NULL。因此,如果您在不使用 FULL 属性方法初始化的情况下返回属性值,它将始终返回 EMPTY 字符串而不是 NULL 值。