我的基类看起来像这样:
public class BaseController : Controller {
}
继承此内容的类:
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";
}
}
从BaseController继承的每个类都需要创建Meta();
的实例我是否有某种方式可以将这个创作从班级ABC& DEF进入基础控制器?请注意,ABC,DEF等类中的某些方法具有不同数量的参数。
我对此有一个想法是在BaseController中执行以下操作:
public Meta Meta { get; set; }
protected override void Initialize(RequestContext requestContext)
{
if (Meta == null) { Meta = new Meta(); }
}
这是一件有效的事吗。此外,如果我在BaseController中执行此操作,那么元字段是否可以在从BaseController继承的类中使用?
答案 0 :(得分:5)
我可能会像下面这样做。是的,如果您将meta定义为受保护的(或者当然是公共的),则可以访问meta。
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();
}
}
答案 1 :(得分:3)
我会做这样的事情:
public class BaseController : Controller {
protected Meta Meta { get; set; }
protected void Create()
{
if (Meta == null) { 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();
}
}
如果您只想从基类访问Meta,请创建meta private
。如果您只想从继承自基类的内容访问Meta,那么您可以使用protected
。如果您想要创建ABC或DEF实例的任何内容也可以访问Meta,那么请将其设为public
。