classVariableNames有什么区别:''和instanceVariableNames:''在Pharo Smalltalk中设置Singleton时?

时间:2016-03-25 08:25:39

标签: smalltalk pharo

一个位于实例端:

Object subclass: #MyClass
    instanceVariableNames: ''
    classVariableNames: ''
    category: 'MyApp'

另一个在课堂上可以访问:

MyClass class
    instanceVariableNames: ''

2 个答案:

答案 0 :(得分:2)

当你创建一个新类(例如一个Pen)时,你创建了一个类,它是一个元类的实例(这将是Pen类),你将能够获得作为Pen类实例的Pen实例。

你可以拥有很多笔,但你只有一个Pen类。

实例变量是一个实例的变量。每个实例都有自己的变量。每支笔都有自己的颜色。

类变量是Class对象(Pen类)的变量。由于您只有一个Pen类实例,因此该变量只有一个值。如果您的笔具有类变量#DefaultColor,则myPenInstance class defaultColor将为所有Pen实例返回相同的内容。

最后,类侧的实例变量作为实例端的实例变量,但是对于类。

类变量和类侧的实例变量之间的区别在于,类变量对于类及其子类是唯一的,而类侧的实例变量将特定于每个类的子类。

如果你有一个UniqueInstance类变量,它存储一个带有访问者的Singleton Pen,Pen uniqueInstancePenSubclass uniqueInstance将返回唯一的笔实例。

如果对类侧的实例变量执行相同的操作,Pen uniqueInstance将返回Pen唯一实例,PenSubclass uniqueInstance将返回PenSubclass唯一实例。

答案 1 :(得分:1)

在这里,我在这里和那里找到了一些信息。

管理在这里找到一个很好的解释,粘贴在几行中以供参考。人们应该读完整个专栏。 http://esug.org/data/Articles/Columns/EwingPapers/cvars&cinst_vars.pdf

  

使用类变量的类可以通过一些变得更加可重用   编码惯例。这些编码约定使创建更容易   子类。有时开发人员不恰当地使用类变量。   不恰当地使用类变量会产生类   难以继承。通常,更好的实现选择   特别的问题是类实例变量而不是类   变量。

     

什么是类变量?课程可以有

     

•上课   变量和

     

•类实例变量。

     

类变量是   通过引用名称来引用实例和类方法   类变量。任何方法,类方法或实例   方法可以引用类变量。