为什么Visual Studio默认不创建公共类?

时间:2009-05-05 12:02:04

标签: c# visual-studio

在Visual Studio中添加新类时,它始终在没有修饰符的情况下创建,并且使类成为内部类。

class MyClass
{
}

我希望我的班级默认创建为公共班级。

为什么默认为内部?

你更喜欢什么?

9 个答案:

答案 0 :(得分:27)

默认情况下创建类internal对我来说非常有意义:保持对自己的私密性,并且只显示真正需要暴露的部分:其他一切只是实现细节,不应该对外界可见

如果您想测试internal类,.NET 2.0以后会引入一个名为InternalsVisibleToAttribute的新属性,

  

指定仅在当前程序集中通常可见的类型对另一个程序集可见。

如果这真的让您烦恼,请参阅%ProgramFiles%\Microsoft Visual Studio 8\Common7 IDE\ItemTemplates\CSharp\1033\Class.zip。这是一个模板,您可以根据自己的需要进行更改。 ReSharper具有类似的功能,但可以从UI内直接访问。

答案 1 :(得分:14)

默认情况下为Visual Studio 2012创建一个Public类:

修改此文件:C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs

看起来像这样:

using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
$endif$using System.Text;
$if$ ($targetframeworkversion$ >= 4.5)using System.Threading.Tasks;
$endif$
namespace $rootnamespace$
{
    public class $safeitemrootname$
    {
    }
}

更多信息:http://aaron-hoffman.blogspot.com/2013/05/edit-default-visual-studio-2012-item.html

答案 2 :(得分:4)

C#倾向于将所有内容默认为必要的最小范围。这是一个很好的约定,在Skeet的书中引用(C# In Depth,第224页“Note / Trivia”):

  

[属性是]唯一需要“私有”的地方 - C#中的其他地方,   在任何给定情况下,默认访问修饰符是最可能的私有修饰符。换句话说,如果可以将某些内容声明为私有,那么完全省略访问修饰符将默认为私有。这是语言设计的一个很好的元素,因为很难意外地弄错:如果你想让某些东西比它更公开,你会注意到你试图使用它。

答案 3 :(得分:2)

我更喜欢它的样子。这样你就必须有意识地决定将它暴露给公众。这很像是争论,您希望您的计算机默认打开外部世界,还是宁愿自己配置为Internet访问。

这两种方法都有其优点,一种具有重大潜在的安全隐患,我相信您应该注意并做出有意识的决定,而不仅仅是自动发生。

答案 4 :(得分:1)

因为在C#中,默认情况下类是内部的。因此,VisualStudio遵循C#规范。

以下文章介绍了C#中的访问修饰符和默认可见性。

http://msdn.microsoft.com/en-us/library/ms173121.aspx

答案 5 :(得分:1)

有趣的是,这只发生在C#中 - 在vb.net中,默认情况下你会得到一个公共类。

就个人而言,我更喜欢默认的公共类,因为其他类通常需要访问它。 (我的大部分工作都在数据层中)

答案 6 :(得分:1)

您可以更改C#类的模板 - 通常位于 “C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC#”

甚至可以创建自己的模板。

答案 7 :(得分:1)

我个人更喜欢它,它迫使你积极思考你想公开哪些课程。

它最终会使您陷入更清晰的API设计,从而使您的软件更加友好。您不希望暴露代码的内部工作方式,如果所有内容都违约,这将不可避免地发生。

这有点主观,我个人更喜欢关闭所有内容,只开启我不需要的东西。

答案 8 :(得分:0)

在所有代码区域中,最好尽可能地限制事物。没有特别原因,一切都应该是私有的,只读的(更好的是const)和静态的。如果变量,方法或属性可以是私有的,则将其设为私有。如果它不能是私有的,但可以受到保护,则使其受到保护。如果它可以只读,请将其设为只读。如果它可以是静态的,请将其设为静态。类也是如此:默认情况下它们应该是内部的,并且只有在您确定这是要导出的类时才公开。