设置为私有或没有私有关键字的属性.有什么不同?

Tal*_*lha 4 c# properties

我正在设置类的属性

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

但我也可以这样设置属性

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

我想知道这些之间的区别吗?他们有什么范围?

Nik*_*wal 5

这意味着您无法从类实例中设置此属性.只有同一类的成员才能设置它.因此,对于外人此属性成为read-only属性.

class Foo
{
    public string Name1 { get; set; }

    public string Name2 { get; private set; }

    public string Name3 { get { return Name2; } set { Name2 = value; }
}
Run Code Online (Sandbox Code Playgroud)

然后

Foo f = new Foo();

f.Name1 = ""; // No Error

f.Name2 = ""; // Error.

f.Name3 = ""; // No Error
Run Code Online (Sandbox Code Playgroud)

Name3将设置值,Name2Name2不能直接设置值.

他们有什么范围?

由于Name1Name3财产是公共的,因此他们及其获取和设置方法随处可用.

Name3也是公共的,但它的设置是私有的,所以属性和get方法将随处可用.Set方法范围仅限于类(private访问修饰符在定义它的实体内具有范围).