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

对类的内部数据成员和函数成员都可以用static修饰。

如果成员被static修饰,那该成员就是静态的,从应用角度讲,类的使用者通过类来访问静态成员在语义上更能够被理解,而通过实例来访问静态成员在语义上显得不合适。
在类的内部,所有成员都可以访问静态成员。但反过来,静态成员绝对不可以访问实例成员。
静态成员的值对于所有实例对象而言,是共享的,所以任何实例都可以访问或修改静态成员,且更改的结果也同样影响所有实例的访问。
 1 None.gif      public   class  Space
 2 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 3InBlock.gif
 4InBlock.gif        public static void Main(string[] args)
 5ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 6InBlock.gif            System.Console.WriteLine(new Order().CreateNumber());//725-1
 7InBlock.gif            System.Console.WriteLine(new Order().CreateNumber());//725-2
 8ExpandedSubBlockEnd.gif        }

 9InBlock.gif
10ExpandedBlockEnd.gif    }

11 None.gif
12 None.gif    
13 None.gif
14 None.gif
15 None.gif     public   class  Order
16 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
17InBlock.gif
18InBlock.gif        private static int Count;// 该Count能被所有的实例访问
19InBlock.gif        public string Number;
20InBlock.gif
21InBlock.gif        public string CreateNumber()
22ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
23InBlock.gif
24InBlock.gif            Count++;
25InBlock.gif            return System.DateTime.Now.ToString("yMd-"+ Count.ToString();
26InBlock.gif        
27ExpandedSubBlockEnd.gif        }

28ExpandedBlockEnd.gif    }
上面的代码中,Count就是一个静态成员,可以被所有的实例访问,且数据共享。


不过,在上述代码中,CreateNumber的方法作为实例方法其实有点不妥,因此最好改为静态方法。
 1 None.gif      public   class  Space
 2 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 3InBlock.gif
 4InBlock.gif        public static void Main(string[] args)
 5ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 6InBlock.gif            System.Console.WriteLine(Order.CreateNumber());//725-1
 7InBlock.gif            System.Console.WriteLine(Order.CreateNumber());//725-2
 8ExpandedSubBlockEnd.gif        }

 9InBlock.gif
10ExpandedBlockEnd.gif    }

11 None.gif
12 None.gif     public   class  Order
13 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
14InBlock.gif
15InBlock.gif        private static int Count;// 该Count能被所有的实例访问
16InBlock.gif        public string Number;
17InBlock.gif
18InBlock.gif        public static string CreateNumber()
19ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
20InBlock.gif
21InBlock.gif            Count++;
22InBlock.gif            return System.DateTime.Now.ToString("yMd-"+ Count.ToString();
23InBlock.gif
24ExpandedSubBlockEnd.gif        }

25ExpandedBlockEnd.gif    }


注意上面代码中第6、7行对于CreateNumber的调用。

static方法的运用,很多在于语义领会。比如CreateNumber如果是实例方法的话,就会出现以下不合理的代码。

1 None.gif             Order order1  =   new  Order();
2 None.gif            Order ordre2  =   new  Order();
3 None.gif            ordre2.Number  =  order1.CreateNumber(); // 虽然编译通过,但语义上也太离奇了吧
4 None.gif             System.Console.WriteLine(ordre2.Number);

所以当CreateNumber是静态的时候,下面的代码更明确的告诉我们正常的语义

1 None.gif             Order order1  =   new  Order();
2 None.gif            Order ordre2  =   new  Order();
3 None.gif            ordre2.Number  =  Order.CreateNumber(); // Number由Ordr总控分配
4 None.gif             System.Console.WriteLine(ordre2.Number);

转载于:https://www.cnblogs.com/shyleoking/archive/2007/02/05/640479.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值