C# 属性:私有方法还是私有get/set?
如果我想在一个私有类中设置我的属性,那么应该只能在这个类中使用和设置这个属性,有什么更好的方法?这个C# 属性:私有方法还是私有get/set?,c#,.net,properties,C#,.net,Properties,如果我想在一个私有类中设置我的属性,那么应该只能在这个类中使用和设置这个属性,有什么更好的方法?这个 public string Name { private get; private set } 或 嗯,还有 private string Name { private get; private set } 更好的方法取决于您想要什么: public string Name{private get;private set}该属性是public,但除了类本身之外,没有人可以读取或写入它。这是完
public string Name { private get; private set }
或
嗯,还有
private string Name { private get; private set }
更好的方法取决于您想要什么:
public string Name{private get;private set}
该属性是public
,但除了类本身之外,没有人可以读取或写入它。这是完全没有用的,所以只需使用
私有字符串名称{get;set}
通常,如果您像查看两个方法一样查看属性(实际上是)
我希望,有可能将该标识符应用于属性get/set
的原因变得显而易见
public string Name { get; private set; }
这就是我认为你想要做的
当属性是公共的时,尝试使其私有化是没有意义的,除非您只想让您的类看到它。在这种情况下,您应该使用:
private string Name { get; set; }
更新:再读一遍,你肯定想要第二个例子。你试过编译你的例子吗?只有中间的那个会翻译 如果要指定额外的可访问性级别关键字,则只能在其中一个访问器(getter/setter)上指定,并且该访问器的级别必须比整个属性的可访问性更严格
这里您可以看到规则:值得注意的是,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;}
这样的结果,那么它可能值得再看一次,并思考一下你真正想在这里说什么。这是一个编译器错误,万岁
第一种情况更糟。它说“这个属性是公共的,除了setter是私有的,getter是私有的”。这也不例外,“这是件事,除了所有的时间”并不是什么真正的表达。编译器不允许我们这样做,这让我们倍感欣慰。对于私有成员,您不需要定义访问器。 只要这样做:
private string _name;
好像你想要
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
这将允许您访问
私有字符串名称
是否要将属性设置为类的私有变量?@kundansinghchoushan是的,我想是的。。。我不确定我是否得到了你想要的^^@Sila我已经添加了我的答案。看一看。请先试着编译。在第一个问题是哪一个是“可编译的”之后,会出现关于哪一个更好的问题设置后的code>
。但即使如此,只有第二个是合法的(见我的答案)。是的,你是对的。不知何故,如果使用private get,我就无法编译;仅当我将private用于get或for时才使用private setset@silla这是因为您使用一个访问修饰符设置属性,而使用不同的访问修饰符设置所有可能的访问器。使用get和set private将其设置为public会否定public部分,因此它不会编译。如果您将其设置为private,那么get和set将自动成为private,因此无需设置它们……只是为了学究:在不指定对getter或setter的不同访问权限的情况下,还有第五种可能性:受保护的内部字符串名{get;set;}
@JeppeStigNielsen Yep。我有一半的想法认为,受保护的内部
不在C#1.0中,后来才出现,但快速搜索似乎表明它一直在那里。内部
现在意外地成为了私有
@JeppeStigNielsen lol。有时候,人们应该保持安静。读得好,尽管对于新手来说,告诉他们最明显的用法可能很方便:公共字符串名称{get;private set}仅仅意味着类可以读取这个属性,但是类本身设置了它。可能是构造函数或类内方法的结果。仅供参考,我不是下选者。我想你的意思是private void set\u Name(string value){}
public string Name{private get;private set;}
不会编译无法为属性的访问器或索引器“Program.Name”指定可访问性修饰符
private string _name;
private string name;
public string Name
{
get { return name; }
set { name = value; }
}