这两个班级有什么区别?
public static class MyClass
{
public static string SayHello()
{
return "Hello";
}
}
public static class MyClass
{
public string SayHello()
{
return "Hello";
}
}
第二个SayHello方法是否也是静态的,因为它在静态类上?如果是这样,当在静态类中定义静态关键字时,有没有理由在方法中包含静态关键字?
答案 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'。
静态类有一个不带参数的静态构造函数,并在第一次使用该类型之前调用它。