On dirait que je suis instanciation cette interface SpeechAPI. Comment est-ce possible?

StackOverflow https://stackoverflow.com/questions/958932

  •  12-09-2019
  •  | 
  •  

Question

J'utilise Microsoft Text-to-Text caractéristique vocale dans mon projet. Mais j'ai une question à ce sujet, en fait pas directement à ce sujet. Donc:

Normalement les programmeurs lors de la création d'interface, ils ont mis I comme préfixe du nom d'interface comme IReadable, IEnumerator etc. Mais je suis tombé sur quelque chose qui m'a vraiment choqué.

dans la DLL Microsoft Speech Text il y a quelque chose comme ceci: SpVoice qui est l'interface (ils ne sont pas mis I préfixe pour une raison quelconque et je ne sais pas pourquoi?) Et SpVoiceClass. Alors quel est le problème que vous pouvez demander, ici:

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

et

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

La chose que je ne comprends pas comment? Comment le premier travail bien qu'il dit qu'il est une interface avec des tonnes de méthodes inappliquées etc.

S'il vous plaît quelqu'un me expliquer comment?

Je suis vraiment confus maintenant et peut-être les développeurs Microsoft n'a pas mis je préfixe pour cette raison, il peut être instancié.

Merci d'avance. J'espère décrire clairement mon problème.

Voici l'image que je veux que vous voyez: text alt
(source: pixelshack.us )

Était-ce utile?

La solution

EDIT : Ah, je vois. Regardez la définition de SpVoice:

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

Recherchez ensuite l'attribut CoClasse:

  

A coclasse fournit le béton   application (s) d'un ou plusieurs   interfaces. Dans COM, ce béton   mises en œuvre peuvent être écrites en tout   langage de programmation qui prend en charge COM   développement de composants, par exemple, Delphes,   C ++, Visual Basic, etc.

Je ne suis pas au courant de cela, alors ne prenez pas cela comme évangile, mais il semble que, par la magie du compilateur déclenché par l'attribut CoClass, vous instancier une instance de SpVoiceClass quand il semble que vous instanciation une interface.

Autres conseils

Si vous pouvez faire parler SpVoice = new SpVoice () et n'a pas eu une erreur, cela signifie SpVoice a un constructeur, ce qui signifie que est pas une interface.

Ne pas prendre la chose « je » trop loin. Il est juste une convention de nommage. Peut-être spVoice n'est pas une interface. Puis-je savoir comment vous concluez spVoice est en effet une interface?

Si elle est une interface, il ne peut pas être instanciée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top