I am using Microsoft Text-to-Text Speech feature in my project. But I have a question about that, actually not directly about that. So :
Normally programmers when creating Interface, they put I as a prefix of the interface name like IReadable,IEnumerator etc. But I’ve come across something that actually shocked me.
in Microsoft Text Speech DLL there is something like this : SpVoice which is interface (they didn’t put I as prefix for some reason and I don’t know why ?) and SpVoiceClass. So then what’s the problem you may ask, Here :
SpVoice speak= new SpVoice(); //I created an object from SpVoice Interface
speak.Speak("Hello StackOverFlow"); //and it speaks and say exactly what I write.
and
SpVoiceClass speak = new SpVoiceClass();
speak.Speak("Hello Kowanichi"); //and it does the same thing.
The thing I don’t get is how ? How does the first one work although it says it is an interface with tons of unimplemented methods etc.
Please some one explain me HOW ?
I am really confused now and maybe Microsoft developers didn’t put I prefix for that reason, it can be instantiated.
Thanks in advance.
Hope I describe my problem clearly.
Here is the image that I want you to see :

(source: pixelshack.us)
EDIT: Ah, I see. Look at the definition of SpVoice:
Then look up the CoClass attribute:
I’m not familiar with this, so don’t take this as gospel, but it appears that, through compiler magic triggered by the
CoClassattribute, you’re instantiating an instance ofSpVoiceClasswhen it looks like you’re instantiating an interface.