Похоже, я создаю экземпляр этого интерфейса SpeechAPI. Как это возможно? - PullRequest
3 голосов
/ 06 июня 2009

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

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

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

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

Вот изображение, которое я хочу, чтобы вы увидели: alt text
(источник: pixhack.us )

Ответы [ 3 ]

7 голосов
/ 06 июня 2009

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

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

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

Бетон поставляет бетон реализация (и) одного или нескольких интерфейсы. В COM такой бетон Реализации могут быть написаны на любом язык программирования, который поддерживает COM разработка компонентов, например Delphi, C ++, Visual Basic и т. Д.

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

0 голосов
/ 06 июня 2009

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

Если это интерфейс, его нельзя создать.

0 голосов
/ 06 июня 2009

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

...