Похоже, я создаю этот интерфейс SpeechAPI. Как это возможно?

Я использую функцию Text-to-Text Speech в моем проекте. Но у меня есть вопрос об этом, на самом деле не прямо об этом. Итак:

Обычно программисты при создании интерфейса, они ставят я в качестве префикса имени интерфейса, такого как IReadable, IEnumerator и т.д. Но я столкнулся с чем-то, что действительно шокировало меня.

в Microsoft Text Speech DLL есть что-то вроде этого: SpVoice, который является интерфейсом (они почему-то не помещали меня как префикс, и я не знаю почему?) и 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 не поместили я префикс по этой причине, он может быть создан.

Спасибо заранее. Надеюсь, что я четко изложу свою проблему.

Вот изображение, которое я хочу видеть: alt text http://www.pixelshack.us/images/dngpe9kzoq83obtiami.png

Ответы

Ответ 1

РЕДАКТИРОВАТЬ: Ах, я вижу. Посмотрите на определение SpVoice:

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

Затем найдите атрибут CoClass:

Компонент поставляет бетон реализация одного или нескольких интерфейсы. В COM такой бетон реализации могут быть записаны в любом язык программирования, поддерживающий COM компонентов, например. Delphi, С++, Visual Basic и т.д.

Я не знаком с этим, так что не принимайте это как Евангелие, но, похоже, с помощью магии компилятора, вызванной атрибутом CoClass, вы создаете экземпляр SpVoiceClass, когда он выглядит так: вы создаете интерфейс.

Ответ 2

Если вы можете использовать SpVoice speak = new SpVoice() и не получили ошибку, значит, у SpVoice есть конструктор, что означает, что это НЕ интерфейс.

Ответ 3

Не принимай "Я" слишком далеко. Это просто соглашение об именах. Возможно, spVoice не является интерфейсом. Могу ли я узнать, как вы заключили spVoice, действительно ли интерфейс?

Если это интерфейс, он не может быть создан.