[英]How to set up Entity Framework model to be derived from the custom class with already existing fields?
[英]How to set the fields of a derived class?
我有2类:“ RootClass”和“ SubClass”。 子类是从RootClass派生的。 如何在RootClass中创建一个构造函数,该构造函数可以将值设置为SubClass中的字段?
我试过了:
基本上我想有2节课。 子类与RootClass相同,但具有一些其他字段,我似乎无法对其应用值。 根据逻辑,我可以创建根或子目录。
显然我在这里走错了路,我该怎么做?
基类不会知道它的子类。 您所说的是错误的面向对象操作或非常不寻常的情况,
如何在
RootClass
创建构造RootClass
,该构造函数可以将值设置为SubClass
字段
您不能-就RootClass
而言, SubClass
不存在。
还尝试将root中的构造函数设置为virtual,以便子构造函数可以覆盖它
您不能-构造函数不被继承,因此没有“虚拟”构造函数的概念。
这是“链接”构造函数的典型模式:
public class RootClass
{
public RootClass(int rootProperty)
{
this.RootProperty = rootProperty;
}
public int RootProperty {get; set;}
}
public class SubClass : RootClass
{
v--- call the base constructor
public SubClass(int rootProperty, string subProperty) : base(rootProperty)
{
this.SubProperty = subProperty;
}
public string SubProperty {get; set}
}
也许您正在寻找SubClass
调用RootClass
构造函数的方法?
public class RootClass
{
public RootClass(int foo)
{
}
}
public class SubClass: RootClass
{
public SubClass(int foo)
: base(foo) // calls RootClass constructor
{
// now set Subclass fields
}
}
您不能从根类访问派生类的任何成员。
典型的设计模式是创建一种方法:
virtual void Init(int a, int b) {}
在您的基类中,参数是派生类执行自我初始化所需的任何信息。 从根类的构造函数调用此函数。
然后,派生类将需要一个构造函数
SubClass() : base() { }
这样可以确保调用根类构造函数,然后调用其自己的init方法。
但是,在这种情况下,最好的设计模式是简单地子类化。
假设RootClass具有成员int a
和Subclass int b
:
class RootClass {
int a;
RootClass(int a) {
this.a = a;
}
}
class SubClass {
int b;
SubClass(int a, int b) : base(a) {
this.b = b;
}
}
通常,基类不应了解其子类的实现细节。 您应该能够在子类中提供自己的构造函数以实例化其字段,如下所示:
class SubClass : RootClass
{
private bool subClassfield;
public SubClass() : base()
{
subClassField = true;
}
}
这不能按预期工作吗? 注意: base()
表达式,该表达式可确保SubClass的构造函数调用基类的构造函数,以确保在继续之前初始化基类。
一个类不能知道从其继承的所有类的实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.