簡體   English   中英

在C#中調用共享相同方法名稱的任何類

[英]Call any class sharing the same method name in C#

我有很多類,它們共享相同的方法名稱,但是不共享通用的基類/接口。 我無法觸摸這些類,但是,無論定義類如何,都可以調用該方法嗎?

例如:

Namespace n1: class A { void M1(n1.CustObj ob1){} }
Namespace n2: class B { void M1(n2.CustObj ob1){} }

是否可以像這樣從這些通用方法/參數中抽象出來?

method(Object obj)
{
    obj.M1(new CustObj() { 
        x = 3; 
    }); // CustObj can either belong to n1 or n2
}

您可以使用dynamic關鍵字或反射。

在這兩者中,我更喜歡dynamic 但是,由於構造函數參數也是不同的類型,因此您需要執行以下操作:

void method(dynamic obj, dynamic arg)
{
    arg.x = 3;
    obj.M1(arg);
}

我知道您的代碼不太可能設置為執行此操作,但是您並未展示如何使用方法。 最后,如果您無法修改現有的類,那么這可能是最好的選擇。

您有許多類,每個類都有一個方法,名稱相同,但簽名不同。 相同的方法名稱在這里是一個紅色的鯡魚,因此它們是不同的方法。

因此,這排除了使用dynamic或反射提供單個方法的能力,該方法可以處理所有方法,除非您隨后在一種方法中對每種類型進行硬編碼測試,或者采用Jonathan Wood的方法通過一個方法傳入現有的CustObj實例。 dynamic參數。

一種解決方案是為每種類型創建擴展方法:

public void Method(this A obj)
{
    obj.M1(new n1.CustObj()
    {
        x = 3
    }); 
}

public void Method(this B obj)
{
    obj.M1(new n2.CustObj()
    {
        x = 3
    }); 
}

等等。 然后至少您可以執行someObj.Method(); AB等上。

暫無
暫無

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

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