【问题标题】:Static constructor cannot have return type but static method must have return type in C#静态构造函数不能有返回类型,但静态方法必须有 C# 中的返回类型
【发布时间】:2013-07-10 04:50:23
【问题描述】:

这些天我只是在做一些关于 OOPS 的头脑风暴,突然想到一个问题。我觉得这很相关,所以我决定问问社区。问题是:

静态构造函数不能有返回类型(int、string等),但静态方法在C#中必须有返回类型。

c#编译器如何区分这两种情况以使其通过编译?

static Class staticClass
{
    public static staticClass(){} //right

    public static int staticClass(){} //wrong

    public static int staticMethod(){} //right
}

【问题讨论】:

    标签: c# oop static static-methods static-constructor


    【解决方案1】:

    静态构造函数不能有返回类型(int、string等)

    正确。但是(静态)构造函数不需要返回任何东西。

    但是静态方法在 C# 中必须有返回类型。

    错了。静态方法很可能是 void 方法。

    c#编译器如何区分...

    static class StaticClass
    {
      public static StaticClass(){} //right  : Wrong. 'public' is not allowed.
    
      public static int StaticClass(){} //wrong : Indeed wrong. Member cannot have same name as class
    
      public static int StaticMethod(){} //right
    }
    

    【讨论】:

    • 对于你的第二句话,关键点是代码块返回的内容有一些语法指示,即使它是一个方法,即使它明确地什么也没有。第二个示例被解释为与类同名的方法,正是因为它定义了返回类型(如果它是void,您将得到类似的错误)。解析器将第一个示例视为具有多余的可访问性修饰符的静态构造函数,而不是专门因为没有返回类型而缺少返回类型的成员。
    • 是的,我的错字 public static StaticClass(){} //是错误的,我们不能在静态构造函数中有修饰符
    【解决方案2】:

    静态构造函数是构造函数的类型,意味着它在第一个类对象初始化期间调用不会有任何返回类型原因。但是静态方法是使用类名调用的方法。假设你有一个类 A,你有一个静态字符串 display() 方法,那么你可以调用 A.display()。因为静态方法对类的所有对象都是通用的。要了解更多关于 Constructor 和他的类型检查这个 URL constructors-net-using-csharp-singleton-pattern/

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 2012-08-13
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多