我想从一个包含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 :(得分: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
必须包含其他有用的方法,或扩展一个接口。
答案 1 :(得分:0)
您无法在派生类中更改方法的签名。返回类型应为IDataContract
。
class Date : IDataContract
{
public IDataContract Parse(string s)
{
return new Date();
}
}
class Time : IDataContract
{
public IDataContract Parse(string s)
{
return new Time();
}
}