首页 新闻 会员 周边 捐助

关于单例模式的一个简单代码问题

0
悬赏园豆:5 [已解决问题] 解决于 2014-10-05 23:58

代码如下所示

这是一段java的单例模式的代码,通过一个共享的静态变量(instance)确实保证系统中只有一个实例,

 

但奇怪的是为什么成员能访问静态变量?C#可是访问不了的。

 

C#和java在这方面设计思想不一样?

 1 public class SingletonClass{
 2 
 3   private static SingletonClass instance=null;
 4 
 5   public static SingletonClass getInstance() {
 6       if(instance==null) {
 7           synchronized(SingletonClass.class) {
 8               if(instance==null)
 9                   instance = new SingletonClass();
10           }
11       }
12       return instance;
13   }
14 
15   private SingletonClass() {
16   }
17 }
c#
在日码农的主页 在日码农 | 菜鸟二级 | 园豆:292
提问于:2014-10-01 14:11
< >
分享
最佳答案
0

 在Java中单例模式出现的原因是在保证唯一性不被更多实例引用创建,即隐藏构造器,调用静态方法间接的创建实例,从而保证其的唯一性,有效的封装起来,从而构成单例模式,安全性更强。你对单例的理解还有点问题。。。。

 实例变量或者叫成员变量都可以访问静态成员变量,这与内存分配的先后有关系,成员变量是在创建实例后生成的,而在此之前静态变量是随类的定义生成,早于成员变量,所以后者可以访问前者,而前者在实例未生成时是无法确定成员变量的。

收获园豆:5
Hermes之翼 | 菜鸟二级 |园豆:214 | 2014-10-01 17:17
其他回答(4)
0

一般是成员可以访问静态变量,静态成员不能访问非静态变量。

雲霏霏 | 园豆:238 (菜鸟二级) | 2014-10-01 15:47
0

C#也是可以成员访问静态变量的,包括C++也是一样。但是,静态成员不能访问非静态成员。

可以说,所有的OOP语言都是这样。

519740105 | 园豆:5810 (大侠五级) | 2014-10-02 09:14
0

你概念弄混淆了啊

jello chen | 园豆:7336 (大侠五级) | 2014-10-05 20:39
0

哎呦,双重锁单例啊

prison | 园豆:298 (菜鸟二级) | 2014-10-05 22:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册