C#需要私有关键字吗?

时间:2011-06-14 19:53:49

标签: c# keyword language-lawyer

(灵感来自this comment

是否存在您需要使用private关键字的情况?
(换句话说,省略关键字会导致不同行为的情况)

4 个答案:

答案 0 :(得分:46)

public class Foo
{
    public int Bar { get; private set; }
}

省略“私人”一词会改变可访问性。

答案 1 :(得分:8)

  

省略关键字[private]会导致不同行为的情况

David Yaw的回答给出了最常见的情况。这是另一个:

Account_generated.cs

// Generated file. Do not edit!

public partial class Account
{
  ...

  private partial class Helper
  {
    ...
  }

  ...
}

AccountHandCoded.cs

public partial class Account
{
  ...

  public partial class Helper
  {
    ...
  }

  ...
}

以上代码无法编译。 Account 的第一个“部分”要求 嵌套类Helperprivate。因此,手动编码器使Helper公开的尝试必定会失败!

但是,如果该类的第一部分只是省略了private关键字,则所有都将编译。

因此对于partial类(和结构,接口),访问级别的声明

partial class Name

表示“允许此类的其他”部分决定可访问性应该是什么“。

虽然明确给出了默认的可访问性(非嵌套类型为internal,嵌套类型为private但意味着“此类必须具有最受限制的访问权限,而其他'部分'无法改变这一事实“。

答案 2 :(得分:1)

private与运行时行为无关。这是为了使您的应用程序可维护。 private隐藏的内容只能通过publicprotected成员影响其类外的代码。

因此,运行时行为的答案是“不”,开发人员行为的答案是“是”!

答案 3 :(得分:0)

在C#7.2和更高版本中。

private protected关键字组合是成员访问修饰符。受保护的私有成员可以通过包含类的派生类型进行访问,但只能在其包含的程序集中。

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/private-protected