【问题标题】:Why we need to use Static keyword inside Static class? [duplicate]为什么我们需要在静态类中使用静态关键字? [复制]
【发布时间】:2015-02-16 11:01:12
【问题描述】:

所有成员都必须显式指定为静态,静态类不会自动将其成员设为静态。静态类可以包含一组静态方法。

定义解释了一切,即我们需要为静态类中的方法、成员等显式地赋予静态。

我真正没有得到的是,如果有一个规则,比如我们只能在静态类中声明静态成员

为什么OOPL 的开发者不把它变成not mandate 。所以编译器应该理解(内部),即即使我们在静态类中声明一个非静态方法,它也应该将该方法理解为static(即静态类只能有静态方法)。

我在处理接口时遇到了这个疑问,即使在接口的情况下,所有接口成员都是public,所以我们不声明公共explicitly,编译器会在内部理解。

我正在寻找一个大的WHY,而不是找借口(应该是这样,它的内置功能)。

【问题讨论】:

  • 应该在某处重复这个......这是一个设计决定,所以我们无法回答为什么,因为我们不是该语言的设计者。
  • 我喜欢 dav_i 的回答。关于成员隐式公开的观点,这是正确的,但 public 是默认值,而 static 绝不是默认值。
  • selman22 这就是事实,我正在寻找他们这样做的原因。 dav_i 看起来很有趣。 downvote 伤心,我不明白为什么。请发表评论,以便我纠正自己(如果有可能)。我正在寻找我不知道的东西。干杯

标签: c# .net static


【解决方案1】:

我想是因为 a) 更容易看到并且 b) 是一致的:

更容易看到

public static class WithoutStaticMembers
{
    public string GetString() // easy to miss that it is static
    {
        return "string";
    }
}

public static class WithStaticMembers
{
    public static string GetString() // clearly static
    {
        return "string";
    }
}

一致

public class NotStaticClass
{
    public static string GetString()
    {
        return "string";
    }
}

public static class StaticClass
{
    public static string GetString()
    {
        return "string";
    }
}
// ...
var s1 = NotStaticClass.GetString();
var s2 = StaticClass.GetString(); // consistent across both static class and not static

【讨论】:

    猜你喜欢
    • 2020-02-02
    • 1970-01-01
    • 2019-09-17
    • 2011-12-17
    • 2012-07-24
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多