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

时间:2012-05-31 06:48:35

标签: c# properties

我正在设置类的属性

public string Name { get; set; }

但我也可以像这样设置属性

public string Name { get; private set; }

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

3 个答案:

答案 0 :(得分: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会在Name2中设置值,但无法直接在Name2中设置值。

  

他们有什么范围?

由于Name1Name3属性是公开的,因此它们及其get和set方法随处可用。

Name3也是公开的,但它的设置是私有的,因此属性和get方法随处可用。 Set方法范围仅限于类(private访问修饰符在实体中定义了范围)。

答案 1 :(得分: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; }
}

答案 2 :(得分:3)

第一个方法可以使用SetGet个方法。第二个方法将在您的课程中提供Get方法,但Set方法仅在您的课程中可用。这通常表示只读行为。