Intece assignment-compatibility(接口赋值兼容性)
一个类和它实现的任何接口是赋值兼容的,一个接口和它的任何祖先接口是赋值兼容的。nil可以被赋给任何接口类型的变量。
一个接口类型的表达式可以被赋予一个变体类型(Variant):若接口类型是IDispatch或它的后代,则Variant变量的类型码是varDispatch,否则为varUnknown。
类型码为varEmpty、varUnknown或者varDispatch的Variant变量,可以赋给IIntece类型的变量;类型码为varEmpty或varDispatch的Variant变量,可以赋给IDispatch类型的变量。
Intece typecasts(接口类型转换)
对于变量和值类型转换(variable and value typecast),接口类型和类类型遵循同样的原则。若一个类实现了某个接口,则类类型可以转换为这个接口类型,比如IMyIntece(SomeObject)。
一个接口类型的表达式可以转换为变体类型。如果接口类型是IDispatch或者它的后代,则变量的类型码是varDispatch,否则为varUnknown。
类型码为varEmpty、varUnknown或varDispatch的Variant变量,可以转换为IIntece接口类型;类型码为varEmpty或varDispatch的Variant变量,可以转换为IDispatch接口类型。
Intece querying(接口查询)
你可以使用as运算符进行受检查的接口转换,我们称它为接口查询。它从一个类引用转换为接口类型,或从接口引用转换为另一种接口类型,它基于实际的(运行时)对象类型。接口查询有如下格式 object as intece
这里,object是一个接口类型的表达式,或者是一个变体类型,或者是实现了某个接口的类实例,intece是任何一个声明了GUID的接口。(能查询的接口必须声明GUID)
如果object是nil,则它返回nil;否则,它传递intece接口的GUID到object的QueryIntece方法:- 148 -
Object inteces
若QueryIntece不是返回0,它引发一个异常;若QueryIntece返回0(表示object的类实现了接口),则接口查询(as语句)返回object的接口引用。
Automation objects(自动化对象)
Automation objects (自动化对象)
若对象所属的类实现了IDispatch接口(在System单元声明),则此对象是一个自动化对象。自动化对象只适用于Windows。
Dispatch intece types (派遣接口类型)
派遣接口类型定义了一个自动化对象的方法和属性,它们通过IDispatch接口来实现。调用派遣接口的方法是通过在运行时调用IDispatch接口的Invoke方法来实现的,a class cannot implement a dispatch intece。
派遣接口声明具有如下格式:
type inteceName = dispintece
['{GUID}']
memberList
end;
这里,['{GUID}']是可选的,memberList包括属性和方法声明。派遣接口和普通接口有类似的声明,但它们不能指定一个祖先。比如,
type
IStringsDisp = dispintece
['{EE05DFE2-5549-11D0-9EA9-0020AF3D82DA}']
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-111.html
靠的是美国