天天看點

成員修飾:靜态和執行個體成員

對類的内部資料成員和函數成員都可以用static修飾。

如果成員被static修飾,那該成員就是靜态的,從應用角度講,類的使用者通過類來通路靜态成員在語義上更能夠被了解,而通過執行個體來通路靜态成員在語義上顯得不合适。

在類的内部,所有成員都可以通路靜态成員。但反過來,靜态成員絕對不可以通路執行個體成員。

靜态成員的值對于所有執行個體對象而言,是共享的,是以任何執行個體都可以通路或修改靜态成員,且更改的結果也同樣影響所有執行個體的通路。

1

成員修飾:靜态和執行個體成員

 public class Space

2

成員修飾:靜态和執行個體成員

 {

3

成員修飾:靜态和執行個體成員

4

成員修飾:靜态和執行個體成員

 public static void Main(string[] args)

5

成員修飾:靜态和執行個體成員

6

成員修飾:靜态和執行個體成員

 System.Console.WriteLine(new Order().CreateNumber());//725-1

7

成員修飾:靜态和執行個體成員

 System.Console.WriteLine(new Order().CreateNumber());//725-2

8

成員修飾:靜态和執行個體成員

 }

9

成員修飾:靜态和執行個體成員

10

成員修飾:靜态和執行個體成員

11

成員修飾:靜态和執行個體成員

12

成員修飾:靜态和執行個體成員

13

成員修飾:靜态和執行個體成員

14

成員修飾:靜态和執行個體成員

15

成員修飾:靜态和執行個體成員

 public class Order

16

成員修飾:靜态和執行個體成員

17

成員修飾:靜态和執行個體成員

18

成員修飾:靜态和執行個體成員

 private static int Count;// 該Count能被所有的執行個體通路

19

成員修飾:靜态和執行個體成員

 public string Number;

20

成員修飾:靜态和執行個體成員

21

成員修飾:靜态和執行個體成員

 public string CreateNumber()

22

成員修飾:靜态和執行個體成員

23

成員修飾:靜态和執行個體成員

24

成員修飾:靜态和執行個體成員

 Count++;

25

成員修飾:靜态和執行個體成員

 return System.DateTime.Now.ToString("yMd-") + Count.ToString();

26

成員修飾:靜态和執行個體成員

27

成員修飾:靜态和執行個體成員

28

成員修飾:靜态和執行個體成員

上面的代碼中,Count就是一個靜态成員,可以被所有的執行個體通路,且資料共享。

不過,在上述代碼中,CreateNumber的方法作為執行個體方法其實有點不妥,是以最好改為靜态方法。

成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員

 System.Console.WriteLine(Order.CreateNumber());//725-1

成員修飾:靜态和執行個體成員

 System.Console.WriteLine(Order.CreateNumber());//725-2

成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員

 public static string CreateNumber()

成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員

注意上面代碼中第6、7行對于CreateNumber的調用。

static方法的運用,很多在于語義領會。比如CreateNumber如果是執行個體方法的話,就會出現以下不合理的代碼。

成員修飾:靜态和執行個體成員

 Order order1 = new Order();

成員修飾:靜态和執行個體成員

 Order ordre2 = new Order();

成員修飾:靜态和執行個體成員

 ordre2.Number = order1.CreateNumber();//雖然編譯通過,但語義上也太離奇了吧

成員修飾:靜态和執行個體成員

 System.Console.WriteLine(ordre2.Number);

是以當CreateNumber是靜态的時候,下面的代碼更明确的告訴我們正常的語義

成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員
成員修飾:靜态和執行個體成員

 ordre2.Number = Order.CreateNumber();//Number由Ordr總控配置設定

成員修飾:靜态和執行個體成員

本文轉自shyleoking 51CTO部落格,原文連結:http://blog.51cto.com/shyleoking/806294

繼續閱讀