例如,在B班我有#setValue
和#getValue
,但我不能在A班中使用这些。我该如何做到这一点?
编辑:
我认为可行的是ClassBInstance setValue:1.
甚至ClassB ClassBInstance setValue:1.
,但两者都没有。
答案 0 :(得分:2)
在A类中创建一个实例变量
instanceVariableNames: 'binstance'
创建initialize
方法(实例方,即不是类侧)并确保以下代码片段在那里
super initialize.
...
bInstance := ClassB new.
现在在ClassA使用的任何地方(即以任何方法)
bInstance setValue: 'whatever'
要么
myVar := bInstance getValue
在Smalltalk中的BTW常规设置和获取不使用...简单
setValue是value:
getValue是value
注意:
希望有所帮助
答案 1 :(得分:1)
Object subclass: #Foo
instanceVariableNames: ''
classVariableNames: 'e'
category: 'Example'
使用ctrl + s
保存现在通过点击然后Refactoring->Class Var Refactoring->Accessors
生成访问者,然后出现一个框接受它
去课堂边。将e方法修改为
Foo class>>e
e isNil ifTrue: [ self e: 5] .
^e.
接受它。
现在再次定义一个新类(记得取消选中class side并转到实例端)。
Object subclass: #Faa
instanceVariableNames: 'a'
classVariableNames: ''
category: 'Example'
保存。
现在再次通过右键单击类Faa
然后生成访问器
Refactoring -> Class Refactoring -> Generate Accessors
然后出现一个框,接受它。
现在转到Playground或Workspace运行这些命令
x := Faa new. "right click on this and select doit"
x a. "right click on this and select print it"
x a: Foo e. "right click on this and select doit"
x a. "right click on this and select print it"
你观察到变量值的差异。