C#中静态⽅法和⾮静态⽅法(实例⽅法)的区别
C#的类中可以包含两种⽅法:C#静态⽅法与⾮静态⽅法。那么他们的定义有什么不同呢?他们在使⽤上会有什么不同呢?让我们来看看最直观的差别:使⽤了 修饰符的⽅法为静态⽅法,反之则是⾮静态⽅法。
下⾯我们分四个⽅⾯来看看C#静态⽅法与⾮静态⽅法的差异:
⼀、C#:
1. 静态成员属于类所有,⾮静态成员属于类的实例所有。
2. 每创建⼀个类的实例,都会在内存中为⾮静态成员新分配⼀块存储;⾮静态成员属于类所有,为各个类的实例所公⽤,⽆论类创建了多少实例,类的静态成员在内存中只占同⼀块区域。
⼆、C#静态⽅法
1. C#静态⽅法属于类所有,类实例化前即可使⽤。
2. ⾮静态⽅法可以访问类中的任何成员,静态⽅法只能访问类中的静态成员。
3. 因为静态⽅法在类实例化前就可以使⽤,⽽类中的⾮静态变量必须在实例化之后才能分配内存,因为,C#静态⽅法调⽤时⽆法判断⾮静态变量使⽤的内存地址。所以⽆法使⽤。⽽静态变量的地址对类来说是固定的,故可以使⽤。
三、C#静态⽅法是⼀种特殊的成员⽅法
它不属于类的某⼀个具体的实例,⽽是属于类本⾝。所以对静态⽅法不需要⾸先创建⼀个类的实例,⽽是采⽤类名.静态⽅法的格式 。
1. static⽅法是类中的⼀个成员⽅法,属于整个类,即不⽤创建任何对象也可以直接调⽤!static内部只能出现static变量和其他static⽅法!⽽且static⽅法中还不能使⽤this…等关键字…因为它是属于整个类!
2. 静态⽅法效率上要⽐实例化⾼,静态⽅法的缺点是不⾃动进⾏销毁,⽽实例化的则可以做销毁。静态⽅法不存在常驻内存⼀说,在加载时机和占⽤内存上,静态⽅法和实例⽅法是⼀样的,在类型第⼀次被使⽤时加载。调⽤的速度基本上没有差别。
3. 静态⽅法和静态变量创建后始终使⽤同⼀块内存,⽽使⽤实例的⽅式会创建多个内存。
4. C#中的⽅法有两种:实例⽅法,静态⽅法.
四、C#⽅法的调⽤
我们通常调⽤⽅法的三种形式:class  X {  static  public  int  A ;    //静态字段  static  public  void  Print ()//静态⽅法  {    Console .WriteLine ("A 的值为{0}",A );  }}class  progrom {  static  void  Main ()  {    X .A =10;    X .Print ();    }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
我们为什么要把⽅法区分为:静态⽅法和⾮静态⽅法(实例⽅法) ?
早期的结构化编程,⼏乎所有的⽅法都是“静态⽅法”,引⼊实例化⽅法概念是⾯向对象概念出现以后的事情了,区分静态⽅法和实例化⽅法不能单单从性能上去理解,创建c++,java,c#这样⾯向对象语⾔的⼤师引⼊实例化⽅法⼀定不是要解决什么性能、的问题,⽽是为了让开发更加模式化、⾯向对象化。
这样说的话,静态⽅法和实例化⽅式的区分是为了解决模式的问题。
拿⼀个例⼦说事:
⽐如说“⼈”这个类,每个⼈都有姓名、年龄、性别、⾝⾼等,这些属性就应该是⾮静态的,因为每个⼈都的这些属性都不相同;但⼈在⽣物学上属于哪个门哪个纲哪个⽬等,这个属性是属于整个⼈类,所以就应该是静态的——它不依赖与某个特定的⼈,不会有某个⼈是“脊椎动物门哺乳动物纲灵长⽬”⽽某个⼈却是“偶蹄⽬”的。 class  Program    {        static  void  Main (string [] args )        {            //第⼀种⽅式, 声明实例,调⽤实例⽅法              ClassName someClass = new  ClassName ();            ClassName .Method ();            //第⼆种⽅式,通过⼀个静态的实例,去调⽤实例⽅法              ClassName .instance .Method ();            //第三种⽅式,直接调⽤静态⽅法              ClassName .Method (); }}
1
2
3
4
5
6
writeline方法属于类7
8
9
10
11
12
13
14

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。