2

我有这个代码:

public string foo { get; set; }

现在,我将其解释为我的对象有一个名为 的公共属性foo,并且它的访问器都是公共的。如果我写这个:

private string foo { get; set; }

我解释说,因为我的对象有一个名为 的私有属性foo,并且它的访问器都是私有的。我理解将财产本身设为私有。我不明白的是为什么访问者必须更具限制性?如果我写:

private string foo { public get; public set; }

我解释说我的对象有一个名为 的私有属性foo,并且它的访问者都是公共的,这是我想要的行为。我想要带有公共访问者的私有财产。我的意思是,如果我必须编写一个 Get/Set 方法,我会的。但我只是对为什么会这样感到困惑。

4

2 回答 2

3

一个属性实际上(在水下)无非是两种方法:

public string foo { get; set; }

将转化为:

public string get_foo() { ... }
public void set_foo(string value) { ... }

这些方法只能有一个访问修饰符,而不是两个的组合。

如果我没记错的话,C#v1 不支持 getter 和 setter 的访问修饰符。该属性有一个用于两种功能的访问修饰符。

在 v2 中,可以“覆盖”getter/setter 对中的一个,这样就可以覆盖“other”函数。重写两个 getter/setter 是没有用的,因为那样会使属性访问修饰符无用。

在我看来,为什么 getter/setter 的访问修饰符更具限制性,这与更容易实现始终具有(隐式公共)属性的接口有关。

有关更多信息,请阅读: http: //msdn.microsoft.com/en-us/library/75e8y5dd (v=vs.80).aspx

于 2013-04-24T21:07:24.840 回答
0

为什么你需要这样的财产

private string foo { public get; public set; }

如果你想让你公开,然后公开财产。

编译器将首先检查属性的访问,然后检查其方法。如果属性是公共的,那么它的方法可以有公共或私有或任何访问器

于 2013-04-24T20:45:53.043 回答