C#调用函数基于对象的子类型

Ale*_*exH 3 c# oop

我现在很困惑C#.

我有一堆类,比如A,B和C,它们都来自"Parent"类.我有一个函数,它接受类型为Parent的参数,并且根据调用它的对象是哪个子类,我希望它调用另一个方法.

目前,我正在考虑使用字典映射类型代表委托,但这看起来很愚蠢,尽管我现在可以想出来.

问题是当我在函数中时,我只知道它是Parent类型,我可以使用GetType来获取我拥有的子类,这将允许字典.否则我可能会使用函数重载.

真正的类型转换似乎是最好的方法,允许我使用函数重载,这将不那么冗长,但我不知道我是如何做到的,或者它是否会起作用.

任何推荐?

Jon*_*eet 7

这些方法都共享相同的签名吗?如果是这样,请将其设置为父类中的虚拟(可能是抽象的)方法:

using System;

public abstract class Parent
{
    public abstract void DoSomething();
}

public class A : Parent
{
    public override void DoSomething()
    {
        Console.WriteLine("A.DoSomething()");
    }
}

public class B : Parent
{
    public override void DoSomething()
    {
        Console.WriteLine("B.DoSomething()");
    }
}

public class Test
{
    static void Main()
    {
        Parent a = new A();
        Parent b = new B();
        a.DoSomething();
        b.DoSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这不合适,那么双重发送 可能是合适的,但我真的需要了解更多情况......可能会改变现有设计的某些部分会更好.