重载类型转换和多态

时间:2019-03-05 21:46:35

标签: c# polymorphism

将对象传递给重载方法时,是否可以将对象自动转换为特定类型?

我有三个都从基类继承的类

class Cat : Animal
class Dog : Animal
class Tiger : Animal

我有另一个类,该类写到数据库(dbInterface)中,其中每个类型都有一个重载的create方法

void Create(Cat cat);
void Create(Dog dog);
void Create(Tiger tiger);

我想像这样调用Create方法

Animal cat = new Cat();

dbInterface.Create(cat);

,我想专门调用Create(Cat cat)方法。当前不会发生这种情况,因为cat是Animal类型。

当前我最不喜欢的是我有一个通用的create方法Create(Animal animal),在该方法中,我检查了有效的转换并调用了适当的方法。

void Create(Animal animal)
{
    Cat cat = animal as Cat;
    if (cat != null)
    {
         Create(cat);
    }
... for Dog and Tiger too ...
}

是否有更好的方法可以做到这一点?还是我做一些愚蠢的事情?

2 个答案:

答案 0 :(得分:2)

您要查找的概念/语言功能称为“动态/双重调度”。对于没有语言的语言,有一种称为“访客模式”的技术。

这应该足以让您入门,但是让我找到过去使用的一些资源...

哦,哇,当您转换参数时,结果是C# has this feature already

答案 1 :(得分:-1)

除非我缺少任何东西,否则为什么要重载Create()而不是:

void Create(Animal animal)

这样,任何实现Animal的类都可以作为参数传递

Animal cat = new Cat();
dbInterface.Create(cat);