不同类的解析方法

时间:2013-12-14 08:38:51

标签: c# inheritance interface

我想从一个包含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();
    }
}

但是发生编译时错误。我怎么能这样做?

2 个答案:

答案 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();
    }
}