接口类
UnigineScript的应用范围仅限于实现与材料相关的逻辑(材料表达式,可编写脚本的材料,画笔材料)。 不要将UnigineScript用作应用程序逻辑的语言,请改用C#/C++,因为这些API是首选的。 无法保证UnigineScipt中新引擎功能的可用性(超出其应用范围),因为当前的支持级别仅假设已解决关键问题。
使用接口对行为进行描述,这些行为被所有继承自接口的类所遵循。接口类并不会执行任何函数,这就意味着这种类仅包含对函数的声明。必须使用派生类才能执行接口类函数。
使用接口提供多形态。即数个类可对同一个接口函数通过不同的方法进行操作。
Interface Class接口类#
接口类的声明与UnigineScript中其它类的声明一样。 在此示例中,使用虚拟抽象函数声明。
class Interface {
// 声明函数
void update() = 0;
//...;
}
所有继承自Interface的类必须包括对函数的实施方法。例如:
class Bar : Interface {
// 执行用于Bar的接口函数
void update() {
log.message("Bar::update(): called\n");
}
};
class Baz : Interface {
// 执行用于Baz的接口函数
void update() {
log.message("Baz::update(): called\n");
}
};
示例
试想存在一个对对象进行描述的接口类:
class Interface {
void update() = 0;
}
Bar和Baz 类描述了两种不同的对象。这两种类继承自Interface类且 Bar类派生自Foo类。
class Foo {
void foo() = 0;
};
class Bar : Foo, Interface {
void update() {
log.message("Bar::update(): called\n");
}
};
class Baz : Interface {
void update() {
log.message("Baz::update(): called\n");
}
};
使用此接口对不同类型的对象进行迭代,这些类型的对象执行对此接口的操作。因此可创建一个对象数组并将对象进行更新。
Interface interfaces[0];
interfaces.append(new Bar());
interfaces.append(new Baz());
foreach(Interface i; interfaces) {
i.update();
}
Bar::update(): called
Baz::update(): called
Abstract virtual function declaration抽象虚拟函数声明#
虚拟函数也是一种函数,可在派生类中将此函数覆盖。
如果某个用户类继承自其它类,那么两种类都自动支持虚拟方法。
可通过下列方式(C++风格)声明虚拟函数:
class Foo {
void foo() = 0;
};
也可使用virtual关键字声明虚拟函数,但此为可选选项。
最新更新:
2020-11-24
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)