您好我正在尝试实现一个结构,我需要能够在C#中的抽象类中创建一个抽象方法,它有一个抽象对象作为参数。例如 -
public abstract class AbstractMapper
{
protected abstract AbstractObject doLoad(AbstractObject obj);
}
public abstract class UserMapper
{
protected override User doLoad(User obj)
{
}
}
在这个例子中,“User”类扩展了“AbstractObject”类......这给了我编译时的错误。有人可以告诉我应该如何实现上述目标吗?
答案 0 :(得分:4)
在AbstractMapper
上使用通用类型参数,约束为AbstractObject
的子类型:
public abstract class AbstractMapper<T> where T : AbstractObject
{
protected abstract T doLoad(T obj);
}
public class UserMapper : AbstractMapper<User>
{
protected override User doLoad(User obj)
{
...
}
}
答案 1 :(得分:1)
UserMapper正在扩展Object类,你试图覆盖一个不存在的方法(doLoad)。
此外,该方法的签名的返回类型为User,您不会返回任何内容。
如果您希望User类扩展AbstractObject类,请执行以下操作:
public class User : AbstractObject
{
protected AbstractObject doLoad(AbstractObject obj)
{
// do something here and return an instance of a class that extends Abstract object
return null; // added to make it compile
}
}
您是否知道访问修饰符受保护意味着它只在类和子类中可见?阅读:https://msdn.microsoft.com/en-us/library/wxh6fsc7.aspx