C#需要private关键字吗?
(灵感来自) 是否曾经有过需要使用C#需要private关键字吗?,c#,keyword,language-lawyer,C#,Keyword,Language Lawyer,(灵感来自) 是否曾经有过需要使用private关键字的情况? (换句话说,省略关键字会导致不同的行为)private与运行时行为无关。这是为了使您的应用程序可维护。private隐藏的内容只能通过public或protected成员影响其类外的代码 因此,对于运行时行为,答案是“否”,对于开发人员行为,答案是“是” public class Foo { public int Bar { get; private set; } } 省略“private”一词会改变可访问性 省略关键字[
private
关键字的情况?(换句话说,省略关键字会导致不同的行为)
private
与运行时行为无关。这是为了使您的应用程序可维护。private
隐藏的内容只能通过public
或protected
成员影响其类外的代码
因此,对于运行时行为,答案是“否”,对于开发人员行为,答案是“是”
public class Foo
{
public int Bar { get; private set; }
}
省略“private”一词会改变可访问性
省略关键字[private
]会导致不同行为的情况
David Yaw的回答给出了最常见的情况。这里还有一个:
在账户中生成.cs
:
// Generated file. Do not edit!
public partial class Account
{
...
private partial class Helper
{
...
}
...
}
public partial class Account
{
...
public partial class Helper
{
...
}
...
}
在AccountHandCoded.cs
中:
// Generated file. Do not edit!
public partial class Account
{
...
private partial class Helper
{
...
}
...
}
public partial class Account
{
...
public partial class Helper
{
...
}
...
}
上面的代码将不会编译。Account
的第一个“部分”要求嵌套类Helper
为private
。因此,手工编码者将助手
公开的尝试必须失败
然而,如果类的第一部分只是省略了private
关键字,那么所有的类都可以编译
因此,对于partial
类(以及结构、接口),无访问级别声明
partial class Name
表示“允许该类的其他‘部分’决定可访问性应该是什么”
而明确给出默认的可访问性(对于非嵌套类型是内部的
,对于嵌套类型是私有的
),则意味着“这个类必须具有尽可能受限的访问权限,其他“部分”不能改变这一事实”。在C#7.2版及更高版本中
private protected
关键字组合是成员访问修饰符。从包含类派生的类型可以访问受私有保护的成员,但只能在其包含程序集中访问
正确。斯莱克斯:当然,C#2.0是六年前发布的,所以“C#2.0新手”有点自相矛盾。很长一段时间以来,属性中的混合可访问性一直是该语言的一个特点。@Eric:True。我想知道在C#1中是否需要
private
。有趣的是,当对属性或索引器中的访问器(getter/setter)应用访问修改器时,与没有修改器时相比,您限制了该getter/setter的可访问性。在C#中的所有其他情况下,指定成员的访问修改器会放松对该成员的访问(因为没有任何访问修改器的默认值是可能的最受限的访问)。@EricLippert删除private
关键字也很重要的另一种情况(参见我的新答案)对C#2来说也是“新的”。现在已经是八年前了,如果我能正确增加你的年数的话。SLaks提出的在C#1中该关键字总是可以省略的猜想仍然成立。问题似乎更多的是,如果完全省略访问修饰符,那么默认情况下几乎总是导致private
访问。不过,正如张贴的两个答案所表明的那样;它只是“几乎”。我已经删除了我的答案,因为事实证明你不能在命名空间作用域中有一个私有委托。private
非嵌套类型没有任何意义;它将与内部
相同。