如果成员被static修饰,那该成员就是静态的,从应用角度讲,类的使用者通过类来访问静态成员在语义上更能够被理解,而通过实例来访问静态成员在语义上显得不合适。
在类的内部,所有成员都可以访问静态成员。但反过来,静态成员绝对不可以访问实例成员。
静态成员的值对于所有实例对象而言,是共享的,所以任何实例都可以访问或修改静态成员,且更改的结果也同样影响所有实例的访问。
1
public class Space
2
{
3![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
}
11![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
13![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
public class Order
16
{
17![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
private static int Count;// 该Count能被所有的实例访问
19
public string Number;
20![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
public string CreateNumber()
22
{
23![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
Count++;
25
return System.DateTime.Now.ToString("yMd-") + Count.ToString();
26
27
}
28
}
上面的代码中,Count就是一个静态成员,可以被所有的实例访问,且数据共享。![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
不过,在上述代码中,CreateNumber的方法作为实例方法其实有点不妥,因此最好改为静态方法。
1
public class Space
2
{
3![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
public static void Main(string[] args)
5
{
6
System.Console.WriteLine(Order.CreateNumber());//725-1
7
System.Console.WriteLine(Order.CreateNumber());//725-2
8
}
9![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
}
11![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
public class Order
13
{
14![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
private static int Count;// 该Count能被所有的实例访问
16
public string Number;
17![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
public static string CreateNumber()
19
{
20![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
Count++;
22
return System.DateTime.Now.ToString("yMd-") + Count.ToString();
23![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
}
25
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
注意上面代码中第6、7行对于CreateNumber的调用。
static方法的运用,很多在于语义领会。比如CreateNumber如果是实例方法的话,就会出现以下不合理的代码。
1
Order order1 = new Order();
2
Order ordre2 = new Order();
3
ordre2.Number = order1.CreateNumber();//虽然编译通过,但语义上也太离奇了吧
4
System.Console.WriteLine(ordre2.Number);
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
所以当CreateNumber是静态的时候,下面的代码更明确的告诉我们正常的语义
1
Order order1 = new Order();
2
Order ordre2 = new Order();
3
ordre2.Number = Order.CreateNumber();//Number由Ordr总控分配
4
System.Console.WriteLine(ordre2.Number);
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)