4

我正在设置这样的类的属性

public string Name { get; set; }

但我也可以这样设置属性

public string Name { get; private set; }

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

4

3 回答 3

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; }
}

然后

Foo f = new Foo();

f.Name1 = ""; // No Error

f.Name2 = ""; // Error.

f.Name3 = ""; // No Error

Name3将设置值,Name2Name2无法直接设置值。

他们有什么范围?

由于Name1Name3属性是公共的,因此它们及其 get 和 set 方法在任何地方都可用。

Name3也是公共的,但它的集合是私有的,因此属性和 get 方法将在任何地方都可用。Set 方法范围仅限于类(private访问修饰符在定义它的实体内具有范围)。

于 2012-05-31T06:49:12.597 回答
3

对于public string Name { get; private set; } 使用私有集的情况,意味着该属性ReadOnly来自外部。当您拥有只读属性并且不想显式声明支持变量时,它很有用。

public string Name { get; private set; }它与以下内容相同:

private string _Name;
public string Name
{
    get { return _Name; }
    private set { _Name = value; }
}
于 2012-05-31T06:50:30.117 回答
3

第一个将在您的班级之外提供SetGet方法。第二个将有一个Get方法可以在您的班级之外使用,但该Set方法只能在您的班级中使用。这通常表示只读行为。

于 2012-05-31T06:50:32.267 回答