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

前端之家收集整理的这篇文章主要介绍了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).狗也有其他特定狗的方法.

猜你在找的C#相关文章