我有一个像这样定义的抽象基类:
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)
在这两种情况下,我都必须提到string
为T
,我想避免使用它。
覆盖Get
的正确方法是什么?
谢谢。
答案 0 :(得分:2)
当您说明您正在实现的界面时,您在编写(string
)时将通用参数指定为: MyBaseClass<string>
,因此仅方式可用于实现Get
方法是使用string
代替T
的所有值。如果您希望类的用户能够使用其他类型,那么您还需要使实现类通用:
public class MyClass<T> : MyBaseClass<T>
{
protected override MyBaseClass<T> Get(T id)
{
throw new NotImplementedException();
}
}
答案 1 :(得分: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
}
}
答案 2 :(得分: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)
}
}