将静态方法放在静态类中并将实例方法放在静态类中有什么区别?

时间:2011-08-18 22:15:35

标签: c# class methods static static-classes

这两个班级有什么区别?

public static class MyClass
{
    public static string SayHello()
    {
        return "Hello";
    }
}

public static class MyClass
{
    public string SayHello()
    {
        return "Hello";
    }
}

第二个SayHello方法是否也是静态的,因为它在静态类上?如果是这样,当在静态类中定义静态关键字时,有没有理由在方法中包含静态关键字?

4 个答案:

答案 0 :(得分:8)

第二个例子在c#中甚至不可能,你会得到编译时错误:

  

'SayHello':无法在静态类中声明实例成员

因此必须使用static关键字声明静态calss的成员。

答案 1 :(得分:1)

无法实例化静态类,因此您的第二段代码无法编译。只能在实例化的类中访问非静态方法。

答案 2 :(得分:0)

  

“...因此,创建静态类与创建仅包含静态成员和私有构造函数的类非常相似。私有构造函数可防止实例化类。

     

使用静态类的优点是编译器可以检查以确保不会意外添加实例成员。编译器将保证无法创建此类的实例。“

http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx

答案 3 :(得分:0)

静态类是密封的,不能包含实例成员。静态方法是Type的一部分而不是实例,静态方法不能访问实例成员。静态方法不能是虚拟的,但可以重载。静态方法也会发出'call'IL操作码而不是'callvirt'。

静态类有一个不带参数的静态构造函数,并在第一次使用该类型之前调用它。