c# – 如何将Animal实例转换为Dog实例?
发布时间:2020-12-15 04:15:21 所属栏目:百科 来源:网络整理
导读:说我有以下课程: class Animal{ public long Id { get; set; } public string Name { get; set; }}class Dog:Animal{ public void sniffBum() { Console.WriteLine("sniff sniff sniff"); }} 如果我有动物实例,我该如何将其投射到狗身上? 像这样的东西: A
说我有以下课程:
class Animal { public long Id { get; set; } public string Name { get; set; } } class Dog:Animal { public void sniffBum() { Console.WriteLine("sniff sniff sniff"); } } 如果我有动物实例,我该如何将其投射到狗身上? Animal a = new Animal(); if ( some logic to determine that this animal is a dog ) { Dog d = (Dog)a; d.sniffBum(); } 基本上我不能使用接口.我将永远有一个Animal对象从我的数据库中出来.狗没有比Animal更多的参数,只有新的方法. 我可以创建一个新的Dog对象,并传递值,(或者有一个类型为Animal的构造函数),但这看起来很麻烦. 解决方法
如果Animal实例从未是Dog实例,则转换检查将不起作用.
您可能需要查看Decorator Pattern,它允许您将Dog方法添加到Animal实例.从本质上讲,狗和动物都有IAnimal接口. Dog类在构造函数中获取Animal实例并保留内部引用. Dog的IAnimal实现只是延伸到它引用的Animal实例(它允许将Dog转换为IAnimal并且表现得像包装的Animal for polymorphism).狗也有其他特定狗的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |