成员修饰:静态和实例成员
来源:互联网 发布:php log4日志 编辑:程序博客网 时间:2024/06/07 08:36
对类的内部数据成员和函数成员都可以用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 }
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的方法作为实例方法其实有点不妥,因此最好改为静态方法。
1 public class Space
2 {
3
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
10 }
11
12 public class Order
13 {
14
15 private static int Count;// 该Count能被所有的实例访问
16 public string Number;
17
18 public static string CreateNumber()
19 {
20
21 Count++;
22 return System.DateTime.Now.ToString("yMd-") + Count.ToString();
23
24 }
25 }
2 {
3
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
10 }
11
12 public class Order
13 {
14
15 private static int Count;// 该Count能被所有的实例访问
16 public string Number;
17
18 public static string CreateNumber()
19 {
20
21 Count++;
22 return System.DateTime.Now.ToString("yMd-") + Count.ToString();
23
24 }
25 }
注意上面代码中第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);
2 Order ordre2 = new Order();
3 ordre2.Number = order1.CreateNumber();//虽然编译通过,但语义上也太离奇了吧
4 System.Console.WriteLine(ordre2.Number);
所以当CreateNumber是静态的时候,下面的代码更明确的告诉我们正常的语义
1 Order order1 = new Order();
2 Order ordre2 = new Order();
3 ordre2.Number = Order.CreateNumber();//Number由Ordr总控分配
4 System.Console.WriteLine(ordre2.Number);
2 Order ordre2 = new Order();
3 ordre2.Number = Order.CreateNumber();//Number由Ordr总控分配
4 System.Console.WriteLine(ordre2.Number);
- 成员修饰:静态和实例成员
- 成员修饰:静态和实例成员
- 实例成员和静态成员
- 静态成员和实例成员
- C#实例成员和静态成员
- C#—静态成员和实例成员
- C#实例成员和静态成员
- 静态成员与实例成员
- 静态成员与实例成员
- 静态成员与实例成员
- 被静态修饰的成员
- js构造函数的静态成员和实例成员
- Java实例成员和静态成员的理解
- java中类的静态成员和实例成员
- C++静态成员和非静态成员的区别 及修饰
- C# 静态成员与实例成员
- C#静态成员与实例成员
- C# 静态成员与实例成员
- 转:经典Excel VBA代码
- 用两种不同的方法 计算出字符串的长度 11月15日
- Android示例HelloGallery中R.styleable unresolved的解决办法
- jstl 对字符串操作
- 高性能计算在石油物探中的应用现状与前景
- 成员修饰:静态和实例成员
- 技术故事
- 菜单变色处理——ASP
- META http-equiv 大全
- 一个北大的中国学生对日本记者的回答 不带一个脏字 骂得全场掌声...
- 转载:提升电子产品可靠性的设计技术和设计管理方法
- 金鳞化龙——AMD处理器“开核”大测试(图)
- CType函数的使用
- 一个修改Oracle用户密码的小诀窍