我在我的项目中使用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.
和
SpVoiceClass speak = new SpVoiceClass();
speak.Speak("Hello Kowanichi"); //and it does the same thing.
我没有得到的是如何?第一个如何工作虽然它说它是一个包含大量未实现方法等的接口。
请有人解释我如何?
我现在真的很困惑,也许微软的开发人员没有把我的前缀放在那个原因上,它可以被实例化。
提前致谢。 希望我能清楚地描述我的问题。
以下是我希望您看到的图片:
(来源:pixelshack.us)
答案 0 :(得分:7)
编辑:啊,我明白了。看看SpVoice的定义:
[CoClass(typeof(SpVoiceClass))]
public interface SpVoice : ISpeechVoice, _ISpeechVoiceEvents_Event
{}
然后查找CoClass属性:
一个coclass供应混凝土 一个或多个的实施 接口。在COM中,这样的具体 实现可以用任何方式编写 支持COM的编程语言 组件开发,例如德尔福, C ++,Visual Basic等
我对此并不熟悉,所以不要将其视为福音,但似乎通过CoClass
属性触发的编译器魔法,您实例化SpVoiceClass
的实例当你看起来像是在实例化一个界面时。
答案 1 :(得分:0)
如果你能做SpVoice speak = new SpVoice()并且没有得到错误,那么这意味着SpVoice有一个构造函数,这意味着它是 NOT 一个接口。
答案 2 :(得分:0)
不要把“我”的事太过分了。它只是一个命名惯例。 也许spVoice不是一个界面。我可以知道你如何总结spVoice确实是一个界面?
如果是接口,则无法实例化。