我正在设置一个这样的类的属性
public string Name { get; set; }但我也可以像这样设置属性
public string Name { get; private set; }我想知道它们之间的区别?他们有什么范围?
发布于 2012-05-31 14:50:30
对于这种情况,使用私有集的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-31 14:49:13
这意味着您不能从类实例中设置此属性。只有同一类的成员才能设置它。因此,对于局外人来说,这个属性变成了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 ErrorName3将在Name2中设置值,但不能直接在Name2中设置值。
以及它们的作用域是什么?
由于Name1和Name3属性是公共属性,因此它们及其get和set方法在任何地方都可用。
Name3也是公共的,但它的set是私有的,因此属性和get方法将在任何地方都可用。Set方法作用域仅限于类(private访问修饰符在定义它的实体内具有作用域)。
发布于 2012-05-31 14:50:32
第一个类将在您的类之外提供Set和Get方法。第二个方法有一个在您的类之外可用的Get方法,但是Set方法只在您的类中可用。这通常表示只读行为。
https://stackoverflow.com/questions/10828697
复制相似问题