C# 如何使基类快速转换为派生类

2020-11-23 14:45:53 +08:00
 Renewmm

我有一个基类

public class ClassA{

    public string Str { get; set;}
    
}

一个继承自ClassA的派生类

public class ClassB : ClassA{

    public string NewStr { get; set;}
    
}

当我想要从基类直接转成派生类时我唯一的想法只有从构造函数下手,就像这样

public class ClassB : ClassA{

    public ClassB(ClassA obj){
    	this.Str = obj.Str;
    }
    
    public string NewStr { get; set;}
}

但是这很繁琐,有更好的办法吗?

3032 次点击
所在节点    C#
9 条回复
rwecho
2020-11-23 16:10:01 +08:00
Renewmm
2020-11-23 18:53:32 +08:00
@rwecho 看起来不错
lukaz
2020-11-24 20:42:37 +08:00
序列化 A,再反序列化成 B
PerFectTime
2020-11-28 17:53:47 +08:00
实在不行转 json 再转回去的骚操作也是可以 hhh
yeqiu
2020-12-03 09:18:17 +08:00
???

ClassA classAobj=new ClassA();
ClassB chassBobj=(classAobj as ClassB)
coder001
2020-12-05 01:50:45 +08:00
没必要纠结于基类还是派生类型。
用即兴接口来玩 duck typing,定义接口,然后实例.AciLike<接口>就能吃了

https://github.com/ekonbenefits/impromptu-interface
Renewmm
2021-04-27 13:21:44 +08:00
@yeqiu "as" "is" 操作无法将基类转换为派生类,他们仅允许由派生类转换为基类
yeqiu
2021-04-27 13:27:03 +08:00
@Renewmm #7

强制转换呢,ClassB chassBobj=(classAobj) as ClassB
Renewmm
2021-04-27 14:53:48 +08:00
@yeqiu as 就是强制类型转换 is 也有类型转换的功能 但是,他们不能让原先没有的 NewStr 变出来,因此,转换会失败,chassBobj 的结果是 null

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728327

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX