Похоже, я создаю этот интерфейс 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, действительно ли интерфейс?
Если это интерфейс, он не может быть создан.