在C#中,我知道有一种在运行时根据抽象参数的具体类型切换方法调用的方法。
因此,在下面的示例中,不需要整个Wash(Animal)方法,并且C#将在运行时根据具体的Animal类型来知道要调用哪个Cat / Dog方法。有语法可以做到这一点,我之前已经做过,但是我一生都不记得它是什么。
public void Wash(Animal animal)
{
switch (animal)
{
case Cat cat:
Wash(cat);
break;
case Dog dog:
Wash(dog);
break;
}
}
public void Wash(Cat cat)
{
}
public void Wash(Dog dog)
{
}
您的意思是这样的吗?:
public abstract class Animal
{
public float Weight {get; set;}
public string PetName {get; set;}
public abstract string Talk();
}
public abstract class Mammal : Animal
{
public abstract override string Talk();
}
public class Dog : Mammal
{
public override string Talk()
{
return "Woof!";
}
}
public class Cat : Mammal
{
public override string Talk()
{
return "Meow!";
}
}
您可以看到完整的代码here