3

プロジェクトで Microsoft Text-to-Text Speech 機能を使用しています。しかし、それについて質問があります。実際には、それについて直接ではありません。そう :

通常、プログラマーはインターフェイスを作成するときに、IReadable、IEnumerator などのインターフェイス名のプレフィックスとして I を付けます。しかし、実際に私に衝撃を与えたものに出くわしました。

Microsoft Text Speech DLL には、次のようなものがあります。インターフェイスである SpVoice (何らかの理由でプレフィックスとして I を付けなかったので、理由がわかりません) と 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.

私が得られないことは、どのようにですか?最初のものは、実装されていないメソッドなどがたくさんあるインターフェースだと言っていますが、どのように機能しますか.

どなたか説明してください。

私は今本当に混乱しています.Microsoftの開発者はその理由でプレフィックスを付けなかったのかもしれません.インスタンス化することができます.

前もって感謝します。私の問題を明確に説明してください。

これが私があなたに見てほしい画像です: (出典: pixelshack.us )代替テキスト

4

3 に答える 3

7

編集:ああ、なるほど。SpVoice の定義を見てください。

[CoClass(typeof(SpVoiceClass))]
public interface SpVoice : ISpeechVoice, _ISpeechVoiceEvents_Event
{}

次に、CoClass 属性を調べます。

コクラスは、1 つ以上のインターフェイスの具体的な実装を提供します。COM では、このような具体的な実装は、Delphi、C++、Visual Basic など、COM コンポーネントの開発をサポートする任意のプログラミング言語で記述できます。

私はこれに慣れていないので、これを福音と見なさないでください。ただし、CoClass属性によってトリガーされるコンパイラ マジックによってSpVoiceClass、インターフェイスをインスタンス化しているように見えるときにインスタンスをインスタンス化しているようです。

于 2009-06-06T03:56:06.380 に答える
0

SpVoice speak= new SpVoice() を実行でき、エラーが発生しなかった場合は、SpVoice にコンストラクターがあることを意味します。つまり、それはインターフェイスではありません。

于 2009-06-06T03:52:07.783 に答える
0

「私」のことをやりすぎないでください。単なる命名規則です。おそらく、spVoice はインターフェイスではありません。spVoice が実際にインターフェイスであると結論付けた理由を教えていただけますか?

インターフェイスの場合、インスタンス化できません。

于 2009-06-06T03:57:09.157 に答える