看起来我正在实例化这个SpeechAPI接口.怎么可能?

Tar*_*rik 3 interface class instance

我在我的项目中使用Microsoft文本到文本语音功能.但我有一个问题,实际上并不是直接的.所以:

通常程序员在创建Interface时,会把我作为接口名称的前缀,如IReadable,IEnumerator等.但是我遇到了一些令我震惊的事情.

在Microsoft Text Speech DLL中有这样的东西:SpVoice是接口(他们没有把我作为前缀出于某种原因,我不知道为什么?)和SpVoiceClass.那么你可能会问的问题是什么,这里:

SpVoice speak= new SpVoice(); //I created an object from SpVoice Interface
speak.Speak("Hello StackOverFlow"); //and it speaks and say exactly what I write.
Run Code Online (Sandbox Code Playgroud)

SpVoiceClass speak =  new SpVoiceClass();
speak.Speak("Hello Kowanichi"); //and it does the same thing.
Run Code Online (Sandbox Code Playgroud)

我没有得到的是如何?第一个如何工作虽然它说它是一个包含大量未实现方法等的接口.

请有人解释我怎么样?

我现在真的很困惑,也许微软的开发人员没有把我的前缀放在那个原因上,它可以被实例化.

提前致谢.希望我清楚地描述我的问题.

这是我想让你看到的图片: alt text http://www.pixelshack.us/images/dngpe9kzoq83obtiami.png

Mic*_*tta 7

编辑:啊,我明白了.看看SpVoice的定义:

[CoClass(typeof(SpVoiceClass))]
public interface SpVoice : ISpeechVoice, _ISpeechVoiceEvents_Event
{}
Run Code Online (Sandbox Code Playgroud)

然后查找CoClass属性:

coclass提供一个或多个接口的具体实现.在COM中,这种具体实现可以用任何支持COM组件开发的编程语言编写,例如Delphi,C++,Visual Basic等.

我不熟悉这个,所以不要把它当作福音,但看起来,通过CoClass属性触发的编译器魔法,你实例化了一个实例,SpVoiceClass看起来你是在实例化一个接口.