C#静态类-静态类不能有非静态成员

C#静态类-静态类不能有非静态成员,c#,static,static-classes,C#,Static,Static Classes,我试图理解c#语言,以及为什么需要在static类中的所有成员上使用static关键字。是的,我知道静态类不能被实例化,但是为什么默认情况下成员在静态类中不是静态的,因为我们知道静态类不能有非静态成员 例如: 为什么不能呢 public static class StaticClass { public static int numberTest = 2; } 是: 这是语言设计者的设计决定。当然,static类只能有static成员,因此static限定符是多余的。但如果你被迫把它放

我试图理解c#语言,以及为什么需要在static类中的所有成员上使用static关键字。是的,我知道静态类不能被实例化,但是为什么默认情况下成员在静态类中不是静态的,因为我们知道静态类不能有非静态成员

例如: 为什么不能呢

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


这是语言设计者的设计决定。当然,
static
类只能有
static
成员,因此
static
限定符是多余的。但如果你被迫把它放在那里,它会让事情变得更清楚,更不容易出错。当您的类和项目越来越大时,这一点变得越来越重要。

很可能是由于历史原因。你是对的,一个自动的、隐含的
静态的
将更符合语言的其他部分


但是在C#2.0中,静态类是新的,而且这种变化必须是非破坏性的

静态这个词说明了一切。静态方法不需要实例,并且该方法需要在没有类实例的情况下访问变量。啊,是的,Eric Lippert(在链接的答案中)的答案相当权威。:)同意,通读另一个有类似问题的线程并理解它。。。奇怪的是我自己在发帖之前找不到它。是的,我同意它是多余的,所以这个问题。。。作为一名开发人员,我知道这在大型项目中很重要,但我只是想知道背后的原因。在界面中,
public
修饰符是隐含的,不允许自己添加。这里似乎有一个类似的例子,有不同的选择。另外,如果某些成员不是静态的,那么向类声明添加
static
修饰符会导致编译错误,这似乎更好,而不是默默地改变这些成员的行为。@MatthewWatson-这可能会起作用,但必须禁止成员使用
静态
修饰符(与
接口
相比)。这将(某种程度上)打破为C#1编写的事实上的静态类。同意(我在您回答时删除了我之前的评论,对不起!)同意,并且完全有道理,但是,在没有任何成员的新静态类上,这将是一个不同的场景。。。但接受回答我发现了一个被愚弄的人,他的回答来自埃里克·利珀特,他不用猜。
public static class StaticClass2
{
    public int numberTest = 2;
}