对c#中的继承感到困惑

Sam*_*tar 1 c# inheritance base-class

我有一个基类看起来像这样:

public class BaseController : Controller {
}
Run Code Online (Sandbox Code Playgroud)

继承这个的类:

public class ABC : BaseController {
   public void Create(string a, string b) {
      var Meta = new Meta();
      Meta.Title = "test";
   }
}

public class DEF : BaseController {
   public void Create(string a, string b, string c) {
      var Meta = new Meta();
      Meta.Title = "job";
   }
}
Run Code Online (Sandbox Code Playgroud)

从BaseController继承的每个类都需要创建一个Meta()实例;

有没有什么方法可以将这个创建从ABC和DEF类转移到基本控制器?请注意,ABC,DEF等类中的某些方法具有不同数量的参数.

我对此有一个想法是在BaseController中执行以下操作:

    public Meta Meta { get; set; }
    protected override void Initialize(RequestContext requestContext)
    {
        if (Meta == null) { Meta = new Meta(); }
    }
Run Code Online (Sandbox Code Playgroud)

这是一件有效的事吗.此外,如果我在BaseController中执行此操作,那么字段Meta是否可以在从BaseController继承的类中使用?

Emi*_*dın 5

我可能会像下面这样做.是的,如果你定义它受保护(或当然是公共),你可以访问元.

public class BaseController : Controller { 
   protected Meta meta;

   public void Create() { 
      meta = new Meta(); 
   } 
}

public class ABC : BaseController { 
   public void Create(string a, string b) { 
      base.Create();
   } 
} 

public class DEF : BaseController { 
   public void Create(string a, string b, string c) { 
      base.Create();
   } 
} 
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,但var a会与BaseController的Create方法中的a参数冲突. (2认同)