【发布时间】:2014-01-28 20:31:03
【问题描述】:
在 Java 中,我可以执行以下操作:
Java
public class Button {
private Callback callback;
public Button(Callback callback) {
this.callback = callback;
}
public void update() {
// Check if clicked..
callback.onClick(this);
}
public interface Callback {
public void onClick(Button Button);
}
}
并像这样使用它:
Button b = new Button(new Callback() {
@Override
public void onClick(Button b) {
System.out.println("Clicked");
}
});
我想知道,在 (Unity) C# 中是否也可以这样做。
目前我的设置相同,语法正确
C#:
public class Button {
private Callback callback;
public Button(Callback callback) {
this.callback = callback;
}
public void Update() {
// Check if clicked..
callback.OnClick(this);
}
public interface Callback {
void OnClick(Button button);
}
}
但是,当我在创建按钮时尝试这样做时,
Button b = new Button(new Button.Callback() {
void OnClick(Button button) {
Debug.Log("Clicked");
}
});
我收到如下错误:
Unexpected symbol 'void'
error CS1526: A new expression requires () or [] after type
error CS8025: Parsing error
我尝试在界面中将方法设置为“虚拟”或“抽象”,或者在创建按钮时在 void OnClick(.. 之前添加“新”关键字,但到目前为止没有运气。
如果我从“new Button.Callback”中删除“()”,意外的符号“void”错误似乎消失了
我希望能得到一些帮助。
【问题讨论】:
-
我现在有更多的运气找到答案,我不知道它被称为内联接口。也感谢您的链接。
-
统一标签适用于 Microsoft Unity。请不要滥用它。