2013-12-14 48 views
0

我想從它包含Parse方法是這樣一個接口繼承不同的類別:解析方法不同類別

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

Do Time和Date類是否實現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必須包含其他有用的方法,或擴展一個接口。