当前位置:编程学习 > C#/ASP.NET >>

关于c#静态方法和实例方法的辨析和应用

本文将围绕c#静态方法和实例方法讨论一下。针对一些观点,如:"静态方法是常驻内存", 还有"静态方法比实例方法先装载",做一个辨析。同时讨论下何时用静态方法,何时用实例方法。

 

前几日,在微软的好友发给我一个链接:《静态方法和实例化方法之间的区别你知道了嘛? 欢迎讨论!! - 问题最终 ...》,然后说这里某些观点需要澄清一下,希望我写一篇blog。我当时读了这篇blog. 文比较短,列举了静态方法和实例方法的几种案例,也没有论点,然后就请大家讨论。后面评论就比blog热闹多了。言辞也激烈,后来该blog作者干脆把这篇blog删了。现在已经看不到这篇blog了。现在我写这篇blog,一是针对一些观点做个辨析,二是完成好友的所托。

 

c#静态方法和实例方法的几种用法

 

见如下代码:这三种形式我们应该都用过。

01 public class SomeClass
02 {
03     private string myfield = null;
04     public static instance = new SomeClass();
05     public instranceMethod() {};
06     public static staticMethod() {};
07 }
08   
09 public class AnotherClass
10 {
11     public static Main()
12     {
13         //第一种方式, 声明实例,调用实例方法
14       SomeClass someClass = new SomeClass();
15          someClass.instanceMethod();
16   
17         //第二种方式,通过一个静态的实例,去调用实例方法
18       SomeClass.instance.instanceMethod();
19   
20         //第三种方式,直接调用静态方法
21       SomeClass.staticMethod();
22     }
23 }

 

这几种方式在调用时间,还有线程安全,面向对象的编程方面都有差别。后文会谈到。

 

"静态方法是常驻内存"

 

这是那位blog作者在评论中给出的观点。我觉得"静态方法是常驻内存"的说法是不对的。要知道一个.net类型的静态方法是属于这个.net类型的。而这个.net类型是一个.net 程序集的一部分。这个.net程序集是被一个AppDomain装入到内存里面来的。这个AppDomain是可以从内存卸载的。一个有.net CLR的进程里面可以有多于一个的AppDomain,第一个AppDomain之后的AppDomain都可以动态创建和卸载。这些AppDomain中的.net程序集,既可以有静态方法,也可以有实例方法。不管是静态方法还是实例方法,都是随其程序集所在的AppDomain一起创建和卸载。第一个AppDomain在整个程序运行结束时也会最后被卸载。其中所含的.net程序集自然也卸载。看图1会更明白点。所以静态方法不存在常驻内存一说。

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,