在 Pharo Smalltalk 中设置 Singleton 时,classVariableNames: '' 和 instanceVariableNames: '' 之间有什么区别?
What is the difference between classVariableNames: '' and instanceVariableNames: '' when setting up a Singleton in Pharo Smalltalk?
一个位于实例端:
Object subclass: #MyClass
instanceVariableNames: ''
classVariableNames: ''
category: 'MyApp'
class 侧可访问的另一个:
MyClass class
instanceVariableNames: ''
好了,我在这里和那里找到了一些信息。
好不容易在这里找到了一个很好的解释,粘贴了几行以供参考。人们应该阅读整个专栏。
http://esug.org/data/Articles/Columns/EwingPapers/cvars&cinst_vars.pdf
Classes that use class variables can be made more reusable with a few
coding conventions. These coding conventions make it easier to create
subclasses. Sometimes developers use class variables inappropriately.
Inappropriate use of class variables results in classes that are
difficult to subclass. Often, the better implementation choice for a
particular problem is a class instance variable instead of a class
variable.
What are class variables? Classes can have
• class
variables, and
• class instances variables.
Class variables are
referenced from instance and class methods by referring to the name of
the class variable. Any method, either a class method or an instance
method can reference a class variable.
当您创建一个新的 class(例如一支笔)时,您会创建一个 Class,它是 metaclass 的一个实例(这将是笔 class ) 并且您将能够获得作为 Pen class.
实例的 Pen 实例
你可以有很多支笔,但你只会有一支笔class。
实例变量是一个实例的变量。每个实例都有自己的变量。每支笔都可以有自己的颜色。
一个class变量是一个Class对象的变量(Penclass)。由于您只有一个 Pen class 实例,因此该变量将只有一个值。如果您的笔有一个 class 变量 #DefaultColor,myPenInstance class defaultColor
将 return 对于所有笔实例都是相同的。
最后,class端的实例变量作为实例端的实例变量,但对于class.
class变量和class端的实例变量的区别在于class变量对于class是唯一的,它是子classes 而 class 端的实例变量将特定于它的每个子classes。
如果您有一个 UniqueInstance class 变量,它在您的 Pen 中存储一个带有访问器的 Singleton,Pen uniqueInstance
和 PenSubclass uniqueInstance
将 return 唯一的 pen 实例。
如果您对 class 端的实例变量执行相同操作,则 Pen uniqueInstance
将 return Pen 唯一实例,而 PenSubclass uniqueInstance
将 return PenSubclass 唯一实例。
一个位于实例端:
Object subclass: #MyClass
instanceVariableNames: ''
classVariableNames: ''
category: 'MyApp'
class 侧可访问的另一个:
MyClass class
instanceVariableNames: ''
好了,我在这里和那里找到了一些信息。
好不容易在这里找到了一个很好的解释,粘贴了几行以供参考。人们应该阅读整个专栏。 http://esug.org/data/Articles/Columns/EwingPapers/cvars&cinst_vars.pdf
Classes that use class variables can be made more reusable with a few coding conventions. These coding conventions make it easier to create subclasses. Sometimes developers use class variables inappropriately. Inappropriate use of class variables results in classes that are difficult to subclass. Often, the better implementation choice for a particular problem is a class instance variable instead of a class variable.
What are class variables? Classes can have
• class variables, and
• class instances variables.
Class variables are referenced from instance and class methods by referring to the name of the class variable. Any method, either a class method or an instance method can reference a class variable.
当您创建一个新的 class(例如一支笔)时,您会创建一个 Class,它是 metaclass 的一个实例(这将是笔 class ) 并且您将能够获得作为 Pen class.
实例的 Pen 实例你可以有很多支笔,但你只会有一支笔class。
实例变量是一个实例的变量。每个实例都有自己的变量。每支笔都可以有自己的颜色。
一个class变量是一个Class对象的变量(Penclass)。由于您只有一个 Pen class 实例,因此该变量将只有一个值。如果您的笔有一个 class 变量 #DefaultColor,myPenInstance class defaultColor
将 return 对于所有笔实例都是相同的。
最后,class端的实例变量作为实例端的实例变量,但对于class.
class变量和class端的实例变量的区别在于class变量对于class是唯一的,它是子classes 而 class 端的实例变量将特定于它的每个子classes。
如果您有一个 UniqueInstance class 变量,它在您的 Pen 中存储一个带有访问器的 Singleton,Pen uniqueInstance
和 PenSubclass uniqueInstance
将 return 唯一的 pen 实例。
如果您对 class 端的实例变量执行相同操作,则 Pen uniqueInstance
将 return Pen 唯一实例,而 PenSubclass uniqueInstance
将 return PenSubclass 唯一实例。