UDN
Search public documentation:
UnrealScriptInterfacesCH
English Translation
日本語訳
한국어
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
日本語訳
한국어
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
UE3 主页 > UnrealScript > UnrealScript 接口
UnrealScript 接口
概述
创建接口
interface InterfaceName [extends ParentInterface] [classSpecifiers]; // 接口主体并且,接口可以选择扩展另一个接口。 如果没有指定基类接口,隐含着它是从 Core.Interface 继承而来的。 同时,也可以使用某些类修饰符。以下类修饰符对于接口来说也是有效的:
- native
- 这将会使得接口是 natived 的,将会创建一个 C++ 接口声明。声明为 Native 的接口仅可以通过 native 类来实现。Native 类的其它限制对于 native 接口也是有效的。可以通过在文件名的后面附加‘native’关键字来使得这个文件用于导出 native 声明。例如,
native(MyInterface)
。使用名称=inherit =
将会从父项的接口中继承文件名。 - dependson(Class)
- 没有添加任何功能,它仅用于提示编译器。
cpptext
块。它将会同 native 接口声明一同被导出。
实现接口
class MyClass extends Object implements(InterfaceName)这个类将也将必须声明接口中声明的所有函数。除 native 关键字外,类中的函数声明必须和接口中的声明相匹配。 接口中声明为 native 的函数在实现该接口的类中不必声明为 native,反之亦然。 通过使用以下语法,一个类可以实现多个接口:
class MyClass extends Object implements(FirstInterface, SecondInterface)
使用接口
var InterfaceName InterfaceReference; function DoSomething() { InterfaceReference.callInterfaceFunction(); } function DoSomethingElse(Object anObject) { if (InterfaceReference(anObject) != none) { // ... } }在 C++ 中,一个 native 接口变量可以使用 TScriptInterface 表示,在 UnTemplate.h 中进行声明。 这个结构体存储了到同一个对象的两个指针 - UObject 指针和接口类型的指针。 UObject 函数
GetInterfaceAddress
可以用于检查 UObject 实例是否实现了特定的接口,如果它实现了,那么将会获得到该接口的指针。 例如,
UObject* pObj; IInterfaceName* Interface = (IInterfaceName*)pObj->GetInterfaceAddress(IInterfaceName::UClassType::StaticClass()); // (if pObj does not implement IInterfaceName, Interface will be NULL.(如果 pObj 没有实现 IInterfaceName,那么接口将是 NULL。)
限制
- Native 接口(使用 native 关键字声明的接口)仅能由 native 类来实现。
- 不支持实现具有同一个基类的多个接口,如果这样做,则会导致不正确的 vtable 偏移。由于这个原因,所以我们推荐您使用平行的层次来组织您的接口类,而不是使用类继承的方式来组织它或对其进行逻辑分组。
- 虽然代理可以在接口中定义,但是不可以通过接口引用调用它们或者为它们分配新的值;您必须换成对实现这个接口的对象进行处理。