知道原始类是否转换为对象类

Sca*_*net 1 c# inheritance casting object

如果我有两个这样的类:

public class Animal
{
    public virtual void speak()
    {
        //TOSPEAK
    }
}

public class Dog : Animal
{
    public override void speak()
    {
        //TODOGSPEAK
    }
}  
Run Code Online (Sandbox Code Playgroud)

如果我将这两个类中的任何一个的对象传递给具有与之类似的形式的方法

void method (Animal ob1);
Run Code Online (Sandbox Code Playgroud)

如果我通过每个对象调用一个会被调用的方法吗?有没有办法知道哪个对象类型已传递给方法?

Sel*_*enç 5

如果我调用了speak方法,如果我传递了每个对象,那么将调用该方法

如果您传入的对象method只是一个Animal,Animal.speak()将被调用.如果它是一只狗,Dog.speak() 将被召唤.这就是多态性的全部要点.

有没有办法知道哪个对象类型已传递给该方法

你可以使用isas运营商:

if(ob1 is Dog)
{

}
Run Code Online (Sandbox Code Playgroud)

注意:正如大家已经提到的,如果你需要检查对象的类型,那不是一个好主意,你应该重新考虑你的设计.如果要为不同类型执行不同的操作,那么就是覆盖方法的重点.如果这不是问题,您可以为每种类型创建重载方法,而不是在一种方法中检查类型并实现相同的目的.

  • 鉴于"坏主意"已经在这篇文章中被陈述*三次*,我想现在每个人都会得到它.不是没有,但他们*确实*将操作符放在语言中,所以最有可能*一些*合理的用例. (3认同)