2015-02-11 195 views
2

我想了解的C#语言,为什么你需要静态类中的所有成员的静态关键字。是的,我知道一个静态类不能实例化,但为什么不是静态类中的成员默认静态,因为我们知道一个静态类不能有非静态成员?C#静态类 - 静态类不能有非静态成员

例如: 为什么不能这样

public static class StaticClass 
{ 
    public static int numberTest = 2; 
} 

是:

public static class StaticClass2 
{ 
    public int numberTest = 2; 
} 
+0

静态这个词说了这一切。静态方法不需要实例,并且该方法需要在没有类实例的情况下访问变量。 – 2015-02-11 08:48:25

+0

啊,是的,Eric Lippert的回答(在相关答案中)是相当权威的。 :) – 2015-02-11 09:05:52

+0

同意,通过其他线程与类似的问题,并理解它......只是奇怪的是,我发现问题之前我自己找不到它。 – DJJ 2015-02-11 09:08:34

回答

2

最可能出于历史原因。你是对的,一个自动的,暗示的static会更符合语言的其他部分。

但是静态类在C#2.0中是新的,并且变化必须是不中断的。

+0

另外,如果某些成员不是静态的,而是静静地改变这些成员的行为,那么将“静态”修饰符添加到类声明中会导致编译错误。 – 2015-02-11 09:01:03

+0

@MatthewWatson - 它可能已经工作,但是静态修饰符必须在成员上被禁止(与'interface'比较)。这将(类型)打破事实上为C#1编写的静态类。 – 2015-02-11 09:01:11

+0

同意(我删除了我以前的评论,因为你在回复,对不起!) – 2015-02-11 09:01:45

3

它是由语言设计者设计decission。当然一个static类只能有static成员,所以static限定符是冗余。但是如果你不得不把它放在那里,它会让事情变得更加清晰,不容易出错。当你的课程和项目变大时,这变得越来越重要。

+0

是的,我同意这是多余的,因此这个问题......我作为一个开发人员了解它在大型项目中很重要,但我只是想知道背后的原因。 – DJJ 2015-02-11 08:55:14

+0

在接口中,“public”修饰符是隐含的,不允许自己添加它。这里似乎有一个平行的,有不同的选择。 – 2015-02-11 08:56:28