对类的内部数据成员和函数成员都可以用static修饰。
如果成员被static修饰,那该成员就是静态的,从应用角度讲,类的使用者通过类来访问静态成员在语义上更能够被理解,而通过实例来访问静态成员在语义上显得不合适。
在类的内部,所有成员都可以访问静态成员。但反过来,静态成员绝对不可以访问实例成员。
静态成员的值对于所有实例对象而言,是共享的,所以任何实例都可以访问或修改静态成员,且更改的结果也同样影响所有实例的访问。
不过,在上述代码中,CreateNumber的方法作为实例方法其实有点不妥,因此最好改为静态方法。
所以当CreateNumber是静态的时候,下面的代码更明确的告诉我们正常的语义
如果成员被static修饰,那该成员就是静态的,从应用角度讲,类的使用者通过类来访问静态成员在语义上更能够被理解,而通过实例来访问静态成员在语义上显得不合适。
在类的内部,所有成员都可以访问静态成员。但反过来,静态成员绝对不可以访问实例成员。
静态成员的值对于所有实例对象而言,是共享的,所以任何实例都可以访问或修改静态成员,且更改的结果也同样影响所有实例的访问。
1
publicclassSpace
2

{
3
4
publicstaticvoidMain(string[]args)
5

{
6
System.Console.WriteLine(newOrder().CreateNumber());//725-1
7
System.Console.WriteLine(newOrder().CreateNumber());//725-2
8
}
9
10
}
11
12
13
14
15
publicclassOrder
16

{
17
18
privatestaticintCount;//该Count能被所有的实例访问
19
publicstringNumber;
20
21
publicstringCreateNumber()
22

{
23
24
Count++;
25
returnSystem.DateTime.Now.ToString("yMd-")+Count.ToString();
26
27
}
28
}
上面的代码中,Count就是一个静态成员,可以被所有的实例访问,且数据共享。
publicclassSpace2


{3

4
publicstaticvoidMain(string[]args)5


{6
System.Console.WriteLine(newOrder().CreateNumber());//725-17
System.Console.WriteLine(newOrder().CreateNumber());//725-28
}9

10
}11

12

13

14

15
publicclassOrder16


{17

18
privatestaticintCount;//该Count能被所有的实例访问19
publicstringNumber;20

21
publicstringCreateNumber()22


{23

24
Count++;25
returnSystem.DateTime.Now.ToString("yMd-")+Count.ToString();26

27
}28
}
不过,在上述代码中,CreateNumber的方法作为实例方法其实有点不妥,因此最好改为静态方法。
1
publicclassSpace
2

{
3
4
publicstaticvoidMain(string[]args)
5

{
6
System.Console.WriteLine(Order.CreateNumber());//725-1
7
System.Console.WriteLine(Order.CreateNumber());//725-2
8
}
9
10
}
11
12
publicclassOrder
13

{
14
15
privatestaticintCount;//该Count能被所有的实例访问
16
publicstringNumber;
17
18
publicstaticstringCreateNumber()
19

{
20
21
Count++;
22
returnSystem.DateTime.Now.ToString("yMd-")+Count.ToString();
23
24
}
25
}
publicclassSpace2


{3

4
publicstaticvoidMain(string[]args)5


{6
System.Console.WriteLine(Order.CreateNumber());//725-17
System.Console.WriteLine(Order.CreateNumber());//725-28
}9

10
}11

12
publicclassOrder13


{14

15
privatestaticintCount;//该Count能被所有的实例访问16
publicstringNumber;17

18
publicstaticstringCreateNumber()19


{20

21
Count++;22
returnSystem.DateTime.Now.ToString("yMd-")+Count.ToString();23

24
}25
}
注意上面代码中第6、7行对于CreateNumber的调用。
static方法的运用,很多在于语义领会。比如CreateNumber如果是实例方法的话,就会出现以下不合理的代码。
1
Orderorder1=newOrder();
2
Orderordre2=newOrder();
3
ordre2.Number=order1.CreateNumber();//虽然编译通过,但语义上也太离奇了吧
4
System.Console.WriteLine(ordre2.Number);
Orderorder1=newOrder();2
Orderordre2=newOrder();3
ordre2.Number=order1.CreateNumber();//虽然编译通过,但语义上也太离奇了吧4
System.Console.WriteLine(ordre2.Number);
所以当CreateNumber是静态的时候,下面的代码更明确的告诉我们正常的语义
1
Orderorder1=newOrder();
2
Orderordre2=newOrder();
3
ordre2.Number=Order.CreateNumber();//Number由Ordr总控分配
4
System.Console.WriteLine(ordre2.Number);
Orderorder1=newOrder();2
Orderordre2=newOrder();3
ordre2.Number=Order.CreateNumber();//Number由Ordr总控分配4
System.Console.WriteLine(ordre2.Number);
4402

被折叠的 条评论
为什么被折叠?



