VS.NET 默认为私有类

Posted

技术标签:

【中文标题】VS.NET 默认为私有类【英文标题】:VS.NET defaults to private class 【发布时间】:2010-09-07 13:58:33 【问题描述】:

为什么 Visual Studio 在 C# 中将新类声明为私有?我几乎总是将它们公开,我是不是疯了?

【问题讨论】:

实际上,类、结构或接口的默认访问级别是内部的,而不是私有的。 Internal is the default if no access modifier is specifiedjust like classes and structs, interfaces default to internal access 来自:MSDN 【参考方案1】:

我不知道为什么会这样,但为了让 Visual Studio 默认将类创建为 Public,您可以这样做:

转到“Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Code\1033”,您会发现一个名为 Class.zip 的文件,在 .zip 文件中打开名为 Class.cs 的文件,文件内容如下:

using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ == 3.5)using System.Linq;
$endif$using System.Text;   

namespace $rootnamespace$

    class $safeitemrootname$
    
    

您只需在班级名称前添加“Public”即可。结果应如下所示:

using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ == 3.5)using System.Linq;
$endif$using System.Text;   

namespace $rootnamespace$

    public class $safeitemrootname$
    
    

您需要做的最后一件事是刷新 Visual Studio 正在使用的所有模板,并让他重新加载它们。这个命令是(它需要一段时间,所以坚持):

devenv /installvstemplates

就是这样,默认情况下不再有私有类。当然你也可以添加内部或任何你想要的。

Source

【讨论】:

哇,正是我想要的!【参考方案2】:

默认情况下,私有访问似乎是 C# 语言说明符的合理设计选择。

一个好的通用设计原则是尽可能限制所有访问级别,以最小化依赖关系。如果您一开始就尽可能地限制并让开发人员采取一些措施使类或成员更加可见,那么您就不太可能以错误的访问级别结束。如果某些内容的公开程度低于您的需要,那么当您遇到编译错误时就会立即显现出来,但要发现比应有的更明显的内容并不容易。

【讨论】:

【参考方案3】:

不,我总是要在班级前面加上“public”关键字,所以你并不孤单。我猜模板设计者认为从最基本的开始是个好主意。你可以在你的 Visual Studio 安装中编辑这些模板,如果它真的让你很烦恼的话,但我还没有达到这一点。

【讨论】:

【参考方案4】:

即使您将类标记为公共,默认情况下成员仍然是私有的。换句话说,这个类在同一个命名空间之外几乎没有用处。不过,我认为默认情况下将其公开可能会走得太远。尝试使用“内部”一些。它应该为大多数目的提供足够的访问权限。

【讨论】:

【参考方案5】:

派生 C# 的 C++ 指定默认类访问级别为私有。 C# 将这一点向前推进,无论好坏。

【讨论】:

默认是内部的,不是私有的。 msdn.microsoft.com/en-us/library/ms173121.aspx【参考方案6】:

出于安全原因。

你想公开某些方法而不是你的整个班级。

【讨论】:

以上是关于VS.NET 默认为私有类的主要内容,如果未能解决你的问题,请参考以下文章

设置为默认类型时如何测试私有/受保护的类变量

如何在基类中将默认构造函数设为私有?

通过定义默认私有构造函数使类不可继承

java接口定义的方法是私有吗?

编写Rectangle(矩形)类.该类具有double类型的私有实例变量

成员类访问修饰符