2013-12-14 5 views
0

Я хочу наследование различных классов от одного интерфейса, что он содержит метод Синтаксического, как это:Анализировать метод для различных классов

interface IDataContract 
{ 
    IDataContract Parse(string s); 
} 

class Date:IDataContract 
{ 
    public Date Parse(string s) 
    { 
     return new Date(); 
    } 
} 

class Time:IDataContract 
{ 
    public Time Parse(string s) 
    { 
     return new Time(); 
    } 
} 

Но возникаю ошибку времени компиляции. Как я могу это сделать?

+0

Выполняют ли классы времени и даты IDataContract? –

ответ

0

Вы не можете изменить подпись метода в производном классе. Тип возврата должен быть IDataContract.

class Date : IDataContract 
{ 
    public IDataContract Parse(string s) 
    { 
     return new Date(); 
    } 
} 

class Time : IDataContract 
{ 
    public IDataContract Parse(string s) 
    { 
     return new Time(); 
    } 
} 
2

Как указано, вы не можете изменить подпись метода таким образом. Вы могли бы использовать дженерики для подобного эффекта, однако:

interface IDataContract<T> 
{ 
    T Parse(string s); 
} 

class Date : IDataContract<Date> 
{ 
    public Date Parse(string s) 
    { 
     return new Date(); 
    } 
} 

class Time : IDataContract<Time> 
{ 
    public Time Parse(string s) 
    { 
     return new Time(); 
    } 
} 

В общем, вы не сможете обойти тот факт, что сделать что-нибудь полезное с ним, абонент должен знать, что представляет собой строку. Или еще IDataContract должен содержать другие полезные методы или расширять интерфейс, который делает.

Смежные вопросы