property:私有方法还是私有get / set?

时间:2012-09-03 18:54:43

标签: c# .net properties

如果我想在Class private中设置我的属性,那么应该只能在这个类中使用和设置这个属性,更好的方法是什么?此

public string Name { private get; private set }

private string Name { get; set }
嗯,还有

private string Name { private get; private set }

7 个答案:

答案 0 :(得分:14)

值得注意的是,最初,C#不允许您在getter或setter上设置不同的访问权限,因此唯一可能的选择是:

public string Name { get; set; }
protected internal string Name { get; set; }
internal string Name { get; set; }
protected string Name { get; set; }
private string Name { get; set; }

(就此而言,你不能拥有自动属性,并且总是必须自己写入支持字段,但我们会忽略这一点,因为我们会有更短的例子那样)。

对两者进行不同的访问通常很有用,通常是比getter更具限制性的setter,所以喜欢

public string Name { get; private set; }

被介绍了。

现在,通过扩展,似乎足够允许:

public string Name { private get; private set; }
private string Name { private get; private set; }

然而,这两个表达的是什么?

第二个并不是太糟糕,它只是不必要的重复。尽管如此,很可能有一些混乱的想法让我们在那里(很可能是一个不完整的重构)。好的代码既可以表达你正在做的事情,也可以让计算机做某事(如果有的话,更多的话),更好的表达清楚。

因此,如果您最终得到{ private get; private set; }之类的内容,那么它可能值得重新审视并思考您真正想在这里说些什么。 Hurray因为它是一个编译器错误。

第一种情况更糟。它说"这个属性是公共的,除了私有的setter和私有的getter"。这不是一个例外,"它是这件事,除了所有的时间"没有任何真正的表达。双重欢呼编译器不要让我们这样做。

答案 1 :(得分:5)

您是否尝试过编写示例?只有中间人会翻译。

如果要指定额外的辅助功能级别关键字,则只能在其中一个访问者(getter / setter)上执行此操作,并且访问者的该级别必须比整个属性的可访问性更具限制性。

您可以在此处查看规则:Restricting Accessor Accessibility

答案 2 :(得分:1)

public string Name { get; private set; }

这是我认为你想要做的事情。

除非您只希望您的班级看到它,否则尝试在属性公开时将其设为私有。在这种情况下,你应该使用:

private string Name { get; set; }

更新:在第二次阅读时,你肯定想要第二个例子。

答案 3 :(得分:0)

更好的方法取决于你想要的东西:

public string Name { private get; private set }该属性为public,但 noone 可以读取或写入该属性,但类本身除外。这完全没用,所以请使用 private string Name { get; set }

一般情况下,如果您将属性视为几种方法(实际上是)

private string get_Name() {  }

private string set_Name(value) {  }

我希望,有可能将该标识符应用于属性get/set的原因变得明显。

答案 4 :(得分:0)

如果你真的想要你所要求的,那么你不需要属性,你应该使用private字段。

答案 5 :(得分:0)

对于私人会员,您不需要定义访问者。 就这样做:

private string _name;

答案 6 :(得分:0)

您似乎想要

private string name;

public string Name

{

    get { return name; }

    set { name = value; }

}

这将允许您访问private string Name