0

我有一个抽象基类,定义如下:

public abstract class MyBaseClass<T>

该类包含方法 Get 的定义:

protected abstract MyBaseClass<T> Get(T id);

我使用 MyBaseClass 创建 MyClass:

public class MyClass : MyBaseClass<string>

现在我必须实现Get,但不知道如何定义它:

public override MyClass Get(object id)

或者

public override MyClass Get(string id)

在这两种情况下,我都必须提到stringasT并且我想避免它。

什么是覆盖的正确方法Get

谢谢你。

4

3 回答 3

2

当您声明您正在实现的接口时,您指定了string编写 ( : MyBaseClass<string>) 时的通用参数,因此您实现该方法的唯一方法Get使用. 如果您希望您的类的用户能够使用其他类型,那么您还需要使实现类成为通用类:stringT

public class MyClass<T> : MyBaseClass<T>
{
    protected override MyBaseClass<T> Get(T id)
    {
        throw new NotImplementedException();
    }
}
于 2013-10-21T14:26:03.993 回答
1
public abstract class MyBaseClass<T>
{
    protected abstract MyBaseClass<T> Get(T id);
}

public class MyClass : MyBaseClass<string>
{
    protected override MyBaseClass<string> Get(string id)
    {
        return FindById(id);//implement your logic
    }
}
于 2013-10-21T14:23:42.870 回答
0

实现抽象类如下:

public abstract class  MyBaseClass<T>
{
    protected abstract MyBaseClass<T> Get(T id);

    protected abstract MyBaseClass<T> Get(string id);
}

和扩展类:

class Class1 : MyBaseClass<Object>
{
    protected override MyBaseClass<object> Get(object id)
    {
        return (MyBaseClass<object>) id;
    }

    protected override MyBaseClass<object> Get(string id)
    {
        return FindMyBaseClass(id)
    }
}
于 2013-10-21T14:22:43.287 回答