小编Jon*_*idt的帖子

带有继承的 C# 方法重载

我一直认为 C# 是通过查看方法调用接收者的运行时类型(即点之前的对象)来动态解析方法调用的。

但是,以下代码示例的工作方式不同。如果我在代码中使用 GenericSpaceShip,它会返回“Generic”;如果我使用 SpaceShip,它会返回“Specific”。请注意,这两种情况下的运行时类型都是 SpaceShip。

所以我的问题是:C# 如何解决 Visit 方法调用,为什么在这种情况下它查看编译时间而不是运行时类型?

请注意,这两个 Visit 方法具有不同的参数。正如 Patko 指出的那样,这意味着我不能在这里使用虚拟/覆盖。

class GenericSpaceShip
{
    public void Visit(GenericPlanet planet)
    {
        Console.WriteLine("Generic");
    }
}

class SpaceShip : GenericSpaceShip
{
    public void Visit(Planet planet)
    {
        Console.WriteLine("Specific");
    }
}

class GenericPlanet { }

class Planet : GenericPlanet { }

class Starter
{
    static void Main(string[] args)
    {
        // SpaceShip ship = new SpaceShip();
        GenericSpaceShip ship = new SpaceShip();
        Planet planet = new Planet();

        ship.Visit(planet); // => Generic …
Run Code Online (Sandbox Code Playgroud)

c# inheritance dispatch

1
推荐指数
1
解决办法
6025
查看次数

标签 统计

c# ×1

dispatch ×1

inheritance ×1