我对理解静态参考有点困惑。
当我声明时,我们可以理解的实例引用
Car myCar = new Car();
Car yourCar = new Car();
--------------- --------------
stack Managed Heap
---------------- --------------
-----
myCar ------- > points to Car
-----
YourCar ------- > points to Car
-----
----------------- ---------------
如果是静态类怎么办?当我宣布
时,我可以这么说吗?staticClass.MyMethod( )
-----------------
Managed Heap
----------------
staticClass
(Memory Address )
-----------------
更新:因为类是蓝图而对象是物理实体;当我声明staticClass.MyMethod或staticClass.MyField = value时,我是否直接与堆交互?(因为静态类不允许实例)。
答案 0 :(得分:11)
不,C#中的static
基本上意味着“与类型相关而不是类型的实例”。
任何静态方法都是静态解析的 - 即在编译时 - 所以调用
StaticClass.MyMethod()
只是解析为静态方法的调用,根本没有涉及实例。没有什么可以指出的,除了类型本身(这是隐式完成的)。
请注意,您不能声明属于静态类的变量。
编辑:基本上,这里的区别在于静态方法和实例方法。碰巧静态类不能有实例方法,你不能创建实例方法,但是没有区别:
StaticClass.StaticMethod();
和
NormalClass.StaticMethod();
甚至
SomeValueType.StaticMethod();
编辑:回复您的修改:
AppDomain
的堆就在堆上。)编辑:我不确定“应用程序级别范围”是什么意思 - 但静态变量与类型相关联,该类型与AppDomain
相关联。只要加载AppDomain
,变量就会被保留。可以出于各种原因卸载它。
答案 1 :(得分:0)
将静态类视为相关方法的命名空间。从技术上讲,它不是面向对象的编程,因为该类不会用于创建对象。这只是将相关方法组合在一起并允许将一些OO相关技术应用于类的方法。 (继承,最重要的。)