将对象传递给重载方法时,是否可以将对象自动转换为特定类型?
我有三个都从基类继承的类
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 ...
}
是否有更好的方法可以做到这一点?还是我做一些愚蠢的事情?
答案 0 :(得分:2)
您要查找的概念/语言功能称为“动态/双重调度”。对于没有语言的语言,有一种称为“访客模式”的技术。
这应该足以让您入门,但是让我找到过去使用的一些资源...
哦,哇,当您转换参数时,结果是C# has this feature already!
答案 1 :(得分:-1)
除非我缺少任何东西,否则为什么要重载Create()而不是:
void Create(Animal animal)
这样,任何实现Animal
的类都可以作为参数传递
Animal cat = new Cat();
dbInterface.Create(cat);