我设置一个类的属性一样,属性设置为私人或无私人关键字。有什么不同?
public string Name { get; set; }
但我也可以设置这样的
public string Name { get; private set; }
我想知道它们之间的区别的财产?和他们有什么范围?
我设置一个类的属性一样,属性设置为私人或无私人关键字。有什么不同?
public string Name { get; set; }
但我也可以设置这样的
public string Name { get; private set; }
我想知道它们之间的区别的财产?和他们有什么范围?
案例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; }
}
这意味着您不能从类实例中设置此属性。只有同一班的同学才能设置它。因此,对于外人来说,这个属性变成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
设定值直接是不可能的。
他们有什么范围?
由于Name1
和Name3
财产是公开的,使他们和他们的get和set方法是随处可见。
Name3
也是公开的,但其集合是私人的,所以属性和获取方法将随处可用。设置方法范围仅限于类(private
访问修饰符在定义它的实体内部具有作用域)。
感谢您澄清这一点很好。 –
第一个将有可用的出你的类Set
和Get
方法。第二个方法将有一个Get
方法可用于您的班级,但Set
方法将只在您的班级内提供。这通常表示只读行为。
后两种情况实际上并不相同。在课堂上,'this.Name =“bill”'对于第一个实现是有效的,而不是*第二个。 – kdbanman
@kdbanman,绝对正确。感谢您指出。 – Habib