C#抽象方法与抽象参数

时间:2015-07-28 15:04:57

标签: c# abstract extends

您好我正在尝试实现一个结构,我需要能够在C#中的抽象类中创建一个抽象方法,它有一个抽象对象作为参数。例如 -

public abstract class AbstractMapper
{
     protected abstract AbstractObject doLoad(AbstractObject obj);
}

public abstract class UserMapper
{
     protected override User doLoad(User obj)
     {

     } 
}

在这个例子中,“User”类扩展了“AbstractObject”类......这给了我编译时的错误。有人可以告诉我应该如何实现上述目标吗?

2 个答案:

答案 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