在Visual Studio中添加新类时,它始终在没有修饰符的情况下创建,并且使类成为内部类。
class MyClass
{
}
我希望我的班级默认创建为公共班级。
为什么默认为内部?
你更喜欢什么?
答案 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#中的访问修饰符和默认可见性。
答案 5 :(得分:1)
有趣的是,这只发生在C#中 - 在vb.net中,默认情况下你会得到一个公共类。
就个人而言,我更喜欢默认的公共类,因为其他类通常需要访问它。 (我的大部分工作都在数据层中)
答案 6 :(得分:1)
您可以更改C#类的模板 - 通常位于 “C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC#”
甚至可以创建自己的模板。
答案 7 :(得分:1)
我个人更喜欢它,它迫使你积极思考你想公开哪些课程。
它最终会使您陷入更清晰的API设计,从而使您的软件更加友好。您不希望暴露代码的内部工作方式,如果所有内容都违约,这将不可避免地发生。
这有点主观,我个人更喜欢关闭所有内容,只开启我不需要的东西。
答案 8 :(得分:0)
在所有代码区域中,最好尽可能地限制事物。没有特别原因,一切都应该是私有的,只读的(更好的是const)和静态的。如果变量,方法或属性可以是私有的,则将其设为私有。如果它不能是私有的,但可以受到保护,则使其受到保护。如果它可以只读,请将其设为只读。如果它可以是静态的,请将其设为静态。类也是如此:默认情况下它们应该是内部的,并且只有在您确定这是要导出的类时才公开。