簡體   English   中英

動態和顯式通用接口實現

[英]Dynamic and Explicit Generic Interface Implementation

我從這里了解到,動態變量無法訪問它們明確實現的接口上的方法。 當我在編譯時不知道類型參數T ,是否有一種簡單的方法來調用接口方法?

interface I<T>
{
    void Method1(T t);
}

class C<T> : I<T>   
{   
    void I<T>.Method1(T t) 
    { 
        Console.WriteLine(t);
    }
}

static void DoMethod1<T>(I<T> i, T t)
{
    i.Method1(t);
}

void Main()
{
    I<int> i = new C<int>();
    dynamic x = i;
    DoMethod1(x, 1);              //This works
    ((I<int>)x).Method1(2);       //As does this
    x.Method1(3);                 //This does not
}      

我不知道類型參數T ,所以(據我所知)我無法轉換動態變量x 我的界面中有很多方法,所以真的不想創建相應的DoXXX()直通方法。

編輯:請注意,我無法控制並且無法更改CI

您可以通過反射來做到這一點:

I<int> i = new C<int>();
dynamic x = i; // you dont have to use dynamic. object will work as well.
var methodInfo = x.GetType().GetInterfaces()[0].GetMethod("Method1");
methodInfo.Invoke(x, new object[] { 3 });

暫無
暫無

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

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