簡體   English   中英

c# 中的運行時類型重載

[英]overloading with runtime type in c#

考慮以下代碼:

public class A
{
    public A(){}
}

public class B:A
{
    public B(){}
}

public class C
{
    public C(){}
    
    public void fun(A a)
    {
        Console.WriteLine("that was A");
    }
    
    public void fun(B b)
    {
        Console.WriteLine("that was B");
    }
}

public class Program
{
    public static void Main()
    {
        A a = new A(), b = new B();
        C c = new C();
        c.fun(a);
        c.fun(b);
    }
}

在當前形式中,它說"that was A"兩次。 如何修復 class C ,以便在b的運行時類型為B時調用fun(B b) ,但編譯類型為A 目前它只有在我在編譯期間將b聲明為B時才能正常工作。

@Edit:不使用if等檢查類型。

通過虛擬方法調用fun

public class A
{
    public virtual void fun(C c) 
    {
        c.fun(this);
    }
}

public class B:A
{
    public override void fun(C c) 
    {
        c.fun(this);
    }
}

public class C
{
    public void fun(A a)
    {
        Console.WriteLine("that was A");
    }

    public void fun(B b)
    {
        Console.WriteLine("that was B");
    }
}

public class Program
{
    public static void Main()
    {
        A a = new A(), b = new B();
        C c = new C();
        a.fun(c);
        b.fun(c);
    }
}

Output:

that was A
that was B

請參閱小提琴上的示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM