[英]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();
在A
, B
等上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.