加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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).狗也有其他特定狗的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读