2009-06-06 5 views
3

Ich verwende Microsoft Text-zu-Text-Sprachfeature in meinem Projekt. Aber dazu habe ich eine Frage, eigentlich nicht direkt. Also:Es sieht so aus, als würde ich diese SpeechAPI-Schnittstelle instanziieren. Wie ist das möglich?

Normalerweise Programmierer beim Erstellen von Interface, sie setzen ich als Präfix der Schnittstelle Namen wie IReadable, IEnumerator usw. Aber ich bin auf etwas gestoßen, das mich tatsächlich schockiert.

in Microsoft Text Speech DLL gibt es so etwas wie: SpVoice, die Schnittstelle ist (sie haben nicht ich als Präfix aus irgendeinem Grund und ich weiß nicht warum?) Und SpVoiceClass. Also, was ist das Problem, das Sie fragt, hier:

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

und

SpVoiceClass speak = new SpVoiceClass(); 
speak.Speak("Hello Kowanichi"); //and it does the same thing. 

Das, was ich nicht bekommen, ist wie? Wie funktioniert das erste, obwohl es sagt, dass es eine Schnittstelle mit Tonnen von nicht implementierten Methoden usw. ist?

Bitte einige erklären mir WIE?

Ich bin jetzt wirklich verwirrt und vielleicht haben Microsoft-Entwickler kein I-Präfix aus diesem Grund, es kann instanziiert werden.

Vielen Dank im Voraus. Hoffe ich beschreibe mein Problem deutlich.

Hier ist das Bild, das ich Sie sehen wollen: alt text http://www.pixelshack.us/images/dngpe9kzoq83obtiami.png

+0

Ist das C#? Sie können dann keine Schnittstellen instantiieren, keine Frage. – Henrik

+0

Ja, ich weiß, aber warum ist das so? – Tarik

+1

Woher haben Sie SpeechLib? –

Antwort

7

EDIT: Ah, ich verstehe. Schauen Sie sich die Definition von SpVoice:

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

dann das CoClass Attribut nachschlagen:

eine Co-Klasse liefert konkrete Implementierung (en) von einem oder mehreren Schnittstellen. In COM können solche konkreten Implementierungen in eine beliebige Programmiersprache geschrieben werden, die die COM Komponentenentwicklung, z.B. Delphi, C++, Visual Basic, usw.

Ich bin mit diesem nicht vertraut sind, so nehmen Sie dies nicht als Evangelium, aber es scheint, dass durch Compiler Magie durch das Attribut CoClass ausgelöst, du bist Instanziieren einer Instanz von SpVoiceClass, wenn es aussieht, als ob Sie eine Schnittstelle instanziieren.

+0

Ich habe gerade die Microsoft Speech-Objektbibliothek von COM in mein Projekt importiert. – Tarik

+0

und Sie können die SpVoiceClass aus dem Bild sehen, das ich gesetzt habe. – Tarik

+0

Danke, dass du mir so geholfen hast. Ich wünsche dir einen schönen Tag :) – Tarik

0

Wenn Sie SpVoice sprechen = new SpVoice tun können() und hat keinen Fehler bekommen, dann hat es bedeutet SpVoice einen Konstruktor, was bedeutet das ist NICHT eine Schnittstelle.

+0

Es ist eine Schnittstelle. Du kannst es selbst ausprobieren, wenn du mir nicht glaubst. – Tarik

+0

Check out wo? –

+0

Ich habe meinen ersten Post bearbeitet und ein Bild davon gemacht. Direkt unter meiner Frage können Sie den Tipp sehen, wenn ich die Maus über die Instanz bringe. – Tarik

0

Nehmen Sie das "Ich" nicht zu weit. Es ist nur eine Namenskonvention. Vielleicht ist spVoice keine Schnittstelle. Darf ich wissen, wie Sie festgestellt haben, dass spVoice tatsächlich eine Schnittstelle ist?

Wenn es eine Schnittstelle ist, kann es nicht instanziiert werden.

+0

Ich lege das reale und genaue Bild davon. – Tarik

Verwandte Themen