博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
成员修饰:静态和实例成员
阅读量:6640 次
发布时间:2019-06-25

本文共 1727 字,大约阅读时间需要 5 分钟。

对类的内部数据成员和函数成员都可以用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的方法作为实例方法其实有点不妥,因此最好改为静态方法。
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 }

注意上面代码中第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);
所以当CreateNumber是静态的时候,下面的代码更明确的告诉我们正常的语义
1
 Order order1 
=
 
new
 Order();
2
 Order ordre2 
=
 
new
 Order();
3
 ordre2.Number 
=
 Order.CreateNumber();
//
Number由Ordr总控分配
4
 System.Console.WriteLine(ordre2.Number);

 

本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806294

你可能感兴趣的文章
【HDOJ】1260 Tickets
查看>>
sql逻辑查询 理论知识
查看>>
HDU3694 Fermat Point in Quadrangle(求四边形费马点)
查看>>
Swift 之惰性求值
查看>>
vue 打包
查看>>
nodejs 箭头函数
查看>>
学习记录(十三)
查看>>
setTimeout与setInterval的区别浅析
查看>>
存储的基本概念
查看>>
入门训练 Fibonacci数列
查看>>
漂浮广告
查看>>
jQuery - 获取内容和属性
查看>>
C++基础入门
查看>>
Android移动view动画问题
查看>>
Jpeg图片显示过程
查看>>
1.java.io包中定义了多个流类型来实现输入和输出功能,
查看>>
Bootstrap下拉菜单
查看>>
NSUserDefaults 保存自己定义对象
查看>>
ubuntu11.04 flash插件安装
查看>>
基础数据结构-串-KMP算法
查看>>