+1  A: 

If you can do SpVoice speak= new SpVoice() and didn't get an error, then it means SpVoice has a constructor, which means that is is NOT an interface.

J.W.
It's an interface. You can check it out yourself if you don't believe me.
Braveyard
Check it out where?
Michael Petrotta
I edited my initial post and put a picture of it. Right below my question you can see the Hint when I bring the mouse over the instance.
Braveyard
+4  A: 

EDIT: Ah, I see. Look at the definition of SpVoice:

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

Then look up the CoClass attribute:

A coclass supplies concrete implementation(s) of one or more interfaces. In COM, such concrete implementations can be written in any programming language that supports COM component development, e.g. Delphi, C++, Visual Basic, etc.

I'm not familiar with this, so don't take this as gospel, but it appears that, through compiler magic triggered by the CoClass attribute, you're instantiating an instance of SpVoiceClass when it looks like you're instantiating an interface.

Michael Petrotta
I just imported Microsoft Speech Object Library into my project from COM.
Braveyard
and you can see the SpVoiceClass from the picture I put.
Braveyard
Thanks you helped me so much. Have a nice day :)
Braveyard
and would you tell me why I'd need a coclass ?
Braveyard
Do you mean, why does that attribute exist on that class when you could simply instantiate SpVoiceClass? I don't know, but I'd guess convenience - maybe an old, primitive way to implement a Factory pattern.
Michael Petrotta
Well according to what I've just read, it must be used when declaring COM Classes in your wrapper library.
Braveyard
A: 

Dont take the "I" thing too far. Its just a naming convention. Perhaps spVoice is not an interface. May I know how you concluded spVoice is indeed an interface ?

If it is an interface it cant be instantiated.

Sathya
I put the real and exact picture of it.
Braveyard