2015-02-10 4 views
-3

Как создать экземпляр базового класса из класса с одним и тем же интерфейсом? Ниже приведен пример того, что я пытаюсь сделать:Создать базовый класс из интерфейса

interface IBASE { } 

public class BASE : IBASE { } 

class TestClass : IBASE { } 

void main() 
{ 
    TestClass tc = new TestClass(); 
    IBASE ib = (IBASE)tc; 
    BASE b = (BASE)ib; // error 
} 

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

Так в чем же решение? Спасибо.

+0

Термин для вещи, которую вы ищете, это «[Duck Typing] (http://en.wikipedia.org/wiki/Duck_typing)». –

ответ

1

Это абсолютно невозможно.

Вы не можете отнести объект к классу, если его тип выполнения на самом деле не наследует этот класс.

+0

как о неявной/явной перегрузке оператора? –

+0

@ Selman22: Это не поможет; нет способа конвертировать этот объект в этот класс. (вы можете вернуть отдельный экземпляр другого класса, но это не то, что он хочет) – SLaks

+0

Не исключено, какие-либо предложения? – Glen