C#语法static class,使静态成员多余?

时间:2014-08-07 02:02:54

标签: c# class syntax static

注意:这是第一次询问有关语法的一般好奇心的问题。因此,我可能没有使用正确的术语来描述我的问题,这可能意味着它已经得到了解答,而且我无法找到它,因为我不知道在搜索中使用什么术语。如果是这种情况,请发表评论,以便我可以编辑和优化问题,以满足堆栈溢出所需的标准。谢谢。

现在的问题。我最近一直在使用静态关键字,因为我有成员需要从没有实例的任何地方访问。然而,当它的self已经是静态时,声明每个成员和方法静态变得越来越乏味。因为如果你宣布一个静态的类,这意味着你不能创建该类的实例(这是我目前的理解)。

public static class Foo {}

为什么每个成员都必须被声明为静态。

public static class Foo 
{
    public static int X;
    public static int Y;
}

我原以为,因为在这种情况下,类foo被声明为静态,所以它的所有成员都将自动为静态,并且您不再需要将每个成员声明为静态。

显然你无法做到这一点,你必须将每个后续成员声明为静态。然而,这对我来说是违反直觉和多余的。

是什么原因?

3 个答案:

答案 0 :(得分:4)

简单地说 - 这是为了便于阅读。您可以单独查看属性定义并知道它是静态的,而无需查看类定义。

你的两行示例可能会使它看起来不必要,但是如果你有一个包含500,1000或更多行代码的类,那么在挖掘大量方法,属性和字段时,你会感到更加清晰。

关于软件开发的问题:永远不要担心一些额外的打字 - 你将读取你的代码的次数比你的次数多。

答案 1 :(得分:2)

据我所知,类上的静态是一种强制所有成员都是静态的方法(从一个中删除静态,它应该给你一个错误)。但是,是的,需要将方法定义为静态。从技术上讲,你不需要在类上定义静态。

作为替代方案,您可以定义一个类,实例化该类,并全局存储类引用,因此不需要每个成员上的静态定义。单例模式在性质上与静态类非常相似,除了您定义一个共享的公共实例。

答案 2 :(得分:1)

为了保持一致 - 意义的一致性。使类静态不会改变关于类的任何内容;它只是禁止实例成员的声明。类本身既不是实例也不是静态的。如果类上的静态暗示所有成员都是静态的,那么会更简洁,但有人可能会认为这样做会为未声明为静态的成员声明引入变量解释。实际上,除非使用静态修饰符,否则成员是实例。