为什么访问者必须比财产更具限制性?

时间:2013-04-24 20:29:01

标签: c# encapsulation

我有这段代码:

public string foo { get; set; }

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

private string foo { get; set; }

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

private string foo { public get; public set; }

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

2 个答案:

答案 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; }

如果您想让自己设置为公开,请将该属性设为公开。

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