我正在设置一个类的属性,就像这样
但我也可以这样设置属性。
public string Name { get; set; }
但我也可以这样设置属性。
public string Name { get; private set; }
我想了解它们之间的区别以及它们的适用范围?
public string Name { get; set; }
public string Name { get; private set; }
我想了解它们之间的区别以及它们的适用范围?
class Foo
{
public string Name1 { get; set; }
public string Name2 { get; private set; }
public string Name3 { get { return Name2; } set { Name2 = value; }
}
那么
Foo f = new Foo();
f.Name1 = ""; // No Error
f.Name2 = ""; // Error.
f.Name3 = ""; // No Error
Name3
会设置Name2
的值,但直接设置Name2
的值是不可能的。Name1
和Name3
属性是公共的,因此它们及其获取和设置方法在任何地方都可用。
Name3
也是公共的,但其设置为私有,因此属性和获取方法将在任何地方都可用。 设置方法的范围仅限于类内部(private
访问修饰符的范围仅限于定义它的实体内部)。第一个方法会在类外提供Set
和Get
方法。第二个方法会在类外提供Get
方法,但Set
方法只能在类内使用。这通常表示只读行为。
对于这个例子 public string Name { get; private set; }
,使用私有的set意味着这个属性从外部来看是只读的。当你有一个只读属性并且不想显式地声明后备变量时,这很有用。
public string Name { get; private set; }
和下面的代码是等价的:
private string _Name;
public string Name
{
get { return _Name; }
private set { _Name = value; }
}
this.Name = "bill"
与第一种实现是有效的,但 不是 第二种实现。 - kdbanman