2011-06-14 76 views
23

(由this comment启发)C#是否需要private关键字?

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

+0

我已经删除了我的答案,因为事实证明您不能在名称空间范围内拥有私人委托。 – 2011-06-14 20:02:41

+0

准确。一个“私有”非嵌套类型没有任何意义;它会和'internal'一样。 – SLaks 2011-06-14 20:03:35

回答

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

省略单词'private'会改变可访问性。

+1

正确。我不知道为什么我没有想到这一点。 – SLaks 2011-06-14 19:58:04

+0

请注意,此功能(混合可见性访问器)是C#2的新增功能。0 – SLaks 2011-06-14 20:00:05

+7

@SLaks:当然,C#2.0在六年前发布,所以“C#2.0新手”有点含糊其词。现在,物业中的混合可达性已成为该语言的一个特征。 – 2011-06-14 20:17:38

1

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

所以对于运行时行为的答案是'否',开发者行为'是'!

+0

我明白了;我的意思是编译时和元数据行为。 – SLaks 2011-06-14 19:57:39

+1

这个问题似乎更多的是这样一个事实,即如果完全忽略访问修饰符,默认情况下几乎总是导致“私有”访问。但现在发布的两个答案表明,它只是'差不多'。 – 2011-06-14 19:58:46

8

的情况是,省略了关键字[private将造成不同的行为

大卫偏航的回答给了最常见的情况。下面是另一个问题:

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)意味着“该类必须具有最受限制的访问权限,而其他'部分'不能改变该事实。

相关问题