c# – 如何将Animal实例转换为Dog实例?

我有以下课程:
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).狗也有其他特定狗的方法.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...