我有这段代码:
public string foo { get; set; }
现在,我将其解释为我的对象有一个名为foo
的公共属性,并且它的访问者都是公共的。如果我写这个:
private string foo { get; set; }
我将其解释为我的对象有一个名为foo
的私有属性,并且它的访问者都是私有的。我理解将财产本身私有化。我不明白为什么访问者必须限制更多?如果我写:
private string foo { public get; public set; }
我认为我的对象有一个名为foo
的私有属性,并且它的访问者都是公共的,这是我想要的行为。我想要带有公共访问者的私有财产。我的意思是,如果我必须写一个Get / Set方法,我会的。但我很困惑为什么会这样。
答案 0 :(得分:3)
一个属性实际上(在水下)只不过是两种方法:
public string foo { get; set; }
将转化为:
public string get_foo() { ... }
public void set_foo(string value) { ... }
这些方法只能有一个访问修饰符,而不是两个组合。
如果我记得错误,C#v1不支持getter和setter的访问修饰符。该属性有一个访问修改器,用于这两个函数。
在v2中,可以“覆盖”getter / setter-pair中的一个,这样就会覆盖“other”函数。没有用来覆盖两个getter / setter,因为这会使property-access修饰符变得无用。
为什么getter / setter的访问修饰符更具限制性,在我看来,与更容易实现总是具有(隐式公共)属性的接口有关。
有关详情,请参阅:http://msdn.microsoft.com/en-us/library/75e8y5dd(v=vs.80).aspx
答案 1 :(得分:0)
为什么需要这样的属性
private string foo { public get; public set; }
如果您想让自己设置为公开,请将该属性设为公开。
编译器将首先检查属性的访问权限,然后检查其方法。如果该属性是公共的,那么其方法可以是公共的或私有的或任何访问者