2012-04-13 52 views
0

如何實現下面接口定義的函數?當我在VS2010中實現時,如下所示。 MyType變灰了,它不再識別類型了?謝謝!C#接口函數定義具體實現

public interface IExample 
{ 
    T GetAnything<T>(); 
} 

public class MyType 
{ 
    //getter, setter here 
} 

public class Get : IExample 
{ 
public MyType GetAnything<MyType>() 
{  ^^^^^^^   ^^^^^^ 
    MyType mt = new MyType(); 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^ /* all greyed out !!*/ 
} 
} 
+1

這有一個[XY問題(http://meta.stackexchange.com/q/66377/4068)的感覺吧... – 2012-04-13 20:22:58

回答

2

做一個普通的interface IExample<T>,然後使用具體類型class Get : IExample<MyType>在下面的例子中實現它。

public interface IExample<T> where T : new() 
{ 
    T GetAnything(); 
} 

public class Get : IExample<MyType> 
{ 
    public MyType GetAnything() 
    { 
     MyType mt = new MyType(); 
     return mt; 
    } 
} 

public class MyType 
{ 
    // ... 
} 
+1

方法的類型參數'T'皮接口的類型參數'T';他們有相同的名字,但他們是獨立的。 – phoog 2012-04-13 20:18:20

+0

@phoog是的,謝謝。但我認爲你可以刪除方法的類型參數。相應地更新我的代碼示例。 – 2012-04-13 20:23:41

+0

你忘了在你的界面聲明中的T:new();) – 2012-04-13 20:24:42

1

丹尼斯的答案看起來像你想什麼但以防萬一它不是爲了讓你代碼工作,你可以這樣做,但我不知道有多少這個值真的有......

public class Get : IExample 
{ 
    public T GetAnything<T>() 
    { 
     return default(T); 
    } 
} 

public void X() 
{ 
    var get = new Get(); 
    var mt = get.GetAnything<MyType>(); 
}