从派生对象中提取基对象
本文关键字:对象 提取 派生 | 更新日期: 2023-09-27 18:36:58
我有一个类A
和一个派生自A
的类B
。我有一个B
的实例,即b
,我想从中提取A
部分。像这样:
var b = new B();
A a = (SomeCast)b;
捕获是a.GetType()
应返回A
类型而不是B
。
是否可以不创建A
实例并从b
手动复制所有字段和属性?
更新问题的根源源于实体框架,该框架不允许添加派生类型来代替基类型。我有一个 biiig 派生类型(不允许添加注释),并且只想将基本部分添加到数据库中。
我只是好奇有一个简单的答案。
如果B
继承自A
,它们的所有B
实例也将是A
的实例,A
的所有字段和属性都可以在B
的实例中使用。
在你的代码中,你不需要强制转换,只需进行赋值:
var b = new B();
A a = b;
但是不需要这个,你可以将b
作为A
的实例,而无需创建变量a
。
免责声明:前面的代码很丑陋
好吧,我将冒着收到很多负面反馈的风险,但让我们看看这是否是OP想要的。
正如每个人都已经告诉您的那样,没有办法将派生"剥离"到基类中。所以我在这里提出的只是一个使用反射的黑客。
public class A
{
public A()
{
}
public A(B inhClass)
{
foreach (var prop in typeof(A).GetProperties())
{
PropertyInfo myPropInfo = typeof(B).GetProperty(prop.Name);
prop.SetValue(this, myPropInfo.GetValue(inhClass, null), null);
}
}
public string a { get; set; }
}
public class B:A
{
public string b { get; set; }
public A baseclass
{
get
{
return new A(this);
}
}
}
如您所见,在类 B 中,我添加了一个新的属性,使用类 A 中的新构造函数返回 A 的新实例。这个新的构造函数循环基类中的所有属性,并从派生类中获取值。
就是这样,我对公开私刑持开放态度:)