天天看点

成员修饰:静态和实例成员

对类的内部数据成员和函数成员都可以用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

继续阅读