例如,本人想在类A里面放一个计数器,看看创建出来的类的实例有多少符合特定的条件
struct C { public static void f() { Console.WriteLine("f()"); } } ...... C obj=new C(); obj.f();
最后一行代码会得到一个编译错误:
error CS0176: Member "Program.C.f()" cannot be accessed with an instance reference; qualify it with a type name instead
为什么不能从实例去调用一个类的静态方法呢? 本人尝试了Java和C++都是可以这么做的。C#的这个限制,其意义是什么,有什么样的考虑才加上了这个限制?
谢谢。
解决方案
5
不能通过实例引用静态成员。然而,可以通过类型名称引用它。例如,请考虑以下类:
public class MyBaseC { public struct MyStruct { public static int x = 100; } }
若要引用静态成员 x,请使用完全限定名(除非可从相同范围访问):
MyBaseC.MyStruct.x
想了解更详细的可以看官方解释http://msdn.microsoft.com/zh-cn/library/98f28cdx(v=vs.90).aspx
5
静态类是程序在一开始运行的时候就为其分配了内存空间,而非静态类是在实例化的时候才为其分配内存空间。调用静态类和非静态类里面的方法基本上是没有区别的,主要还是看变量。为了数据安全起见,用非静态类比较好,但也不一定,具体问题具体分析吧。
5
静态方法不属于实例,直接 类名.方法() 调用就可以了。
5
对于你的疑惑,书上是这么写的,可以将静态字段、属性视为是类的全局变量,可以访问独立于任何对象实例的数据。也就是说这种调用方式是为了方便访问这类全局变量,不需要每次访问时都实例化。本人是这么理解的。
5
静态方法不需要再new一个对象就可以 类名.方法 直接调用了….
5
本人觉得你三个语言都要重头学起。
5
静态方法不需要再new一个对象就可以 类名.方法 直接调用就OK
5
很是同意,都说半瓶水晃,但是感觉LZ半瓶水都没有。