我对理解静态引用有点困惑.
当我声明时,我们可以理解实例引用
Car myCar = new Car();
Car yourCar = new Car();
--------------- --------------
stack Managed Heap
---------------- --------------
-----
myCar ------- > points to Car
-----
YourCar ------- > points to Car
-----
----------------- ---------------
Run Code Online (Sandbox Code Playgroud)
如果是静态类怎么办?当我宣布时,我可以这么说吗?
staticClass.MyMethod( )
-----------------
Managed Heap
----------------
staticClass
(Memory Address )
-----------------
Run Code Online (Sandbox Code Playgroud)
更新:因为类是蓝图而对象是物理实体;当我声明staticClass.MyMethod或staticClass.MyField = value时,是否包含静态类,我是否直接与堆交互?(因为静态类不允许实例).
Jon*_*eet 11
不,static在C#中基本上意味着"与类型相关而不是类型的实例".
任何静态方法都是静态解析的 - 即在编译时 - 所以调用
StaticClass.MyMethod()
Run Code Online (Sandbox Code Playgroud)
只是解析为静态方法的调用,根本没有涉及实例.没有什么可以指出的,除了类型本身(这是隐式完成的).
请注意,不允许声明属于静态类的变量.
编辑:基本上,这里的区别在于静态方法和实例方法.碰巧静态类不能有实例方法,也不能创建实例方法,但是之间没有区别:
StaticClass.StaticMethod();
Run Code Online (Sandbox Code Playgroud)
和
NormalClass.StaticMethod();
Run Code Online (Sandbox Code Playgroud)
乃至
SomeValueType.StaticMethod();
Run Code Online (Sandbox Code Playgroud)
编辑:回复您的编辑:
AppDomain静态变量的堆数基本上都是.)编辑:我不确定你的"应用程序级别范围"是什么意思 - 但静态变量与类型相关联,与之关联AppDomain.只要AppDomain加载变量,变量就会被保留.它可以出于各种原因卸载.
| 归档时间: |
|
| 查看次数: |
234 次 |
| 最近记录: |