gpt4 book ai didi

c# - 将类转换为派生类

转载 作者:行者123 更新时间:2023-11-30 13:40:00 26 4
gpt4 key购买 nike

有没有办法将基类转换为派生类?

这是两个类的简单示例:

namespace BLL
{
public class Contact
{
public int ContactID { get; set; }
public string Name { get; set; }

public Contact(){}
}
}

namespace BLL
{
public class SpecialContact : Contact
{
public SpecialContact(){}
}
}

理想情况下,我可以这样做:

Contact contact = new Contact();
SpecialContact specialContact = new SpecialContact();

contact.ContactID = 123;
contact.Name = "Jeff";

specialContact = contact;

这段代码当然会抛出一个错误。除了为 SpecialContact 或设置每个属性的方法编写另一个构造函数外,还有其他解决方案吗?

最佳答案

Base 类引用分配给 Derived 类引用变量是非法的。

X 类型的变量只能是对X 类型或派生对象的引用。

您可能需要另一个 SpecialContact 实例,它包含与现有对象相同的数据。没有办法避免手动复制。

当我需要将匹配的属性从一个对象复制到另一个不兼容的对象时,我使用以下扩展方法(1):

public static void AssignFrom(this object destination, object source) {
Type dest_type = destination.GetType();
Type source_type = source.GetType();

var matching_props = from d in dest_type.GetProperties()
join s in source_type.GetProperties()
on d.Name equals s.Name
where d.IsWritable() && s.IsReadable()
select new {
source = s,
destination = d
};

foreach (var prop in matching_props) {
prop.destination.SetValue(destination, prop.source.GetValue(source, null), null);
}
}

然后你可以这样做:

specialContact.assignFrom(contact);

请考虑这是一种解决方法。正确的解决方案是在您不会遇到此问题的地方正确设计您的类层次结构。


1 注意:它按名称匹配属性并假定它们属于同一类型。

关于c# - 将类转换为派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com