簡體   English   中英

在c#中實現通用接口

[英]implementing generic interfaces in c#

我們如何將泛型接口繼承到泛型類? 我嘗試了下面的代碼並收到錯誤消息:“Bc'沒有實現接口成員'ConsoleApplication3.iB.showval(int,int)”。 如何解決?

interface iB<X, Y> 
{
    void storeval(X p1,Y p2);
    void getval();
}
class Bc<X,Y>:iB<int,int>
{
    private X _dm1;
    private Y _dm2;
    public void storeval(X p1,Y p2) 
    {
        this._dm1 = p1;
        this._dm2 = p2;
    }
    public void getval() 
    {
        Console.WriteLine("{0}\t{1}",this._dm1,this._dm2);
    }
}
class Program
{
    static void Main(string[] args)
    {
        Bc<string, bool> b1 = new Bc<string, bool>();
        b1.storeval("AppScienti",true);
        b1.getval();
        Console.ReadKey();
    }
}

您的代碼不是繼承通用接口 - 它繼承了通用接口的完全定義的實例。

由於您繼承了iB<int,int> ,因此需要實現

public void storeval(int p1, int p2) {
    ...
}

或者,您可以繼承iB<X,Y> ,在這種情況下,您的接口實現將起作用:

class Bc<X,Y> : iB<X,Y> {
    ...
}

在任何一種情況下,依賴於通用接口的類型參數的接口方法的參數都需要與繼承接口時指定的類型參數匹配。

使用class Bc<X, Y> : iB<int, int>您可以定義一個新的泛型類,其中包含兩個新的泛型類型參數,這些參數恰好實現了iB<int, int> 如果重命名它們會更清楚: class Bc<NewX, NewY> : iB<int, int>

您的兩個新泛型類型參數與接口定義的參數無關。 您現在可以聲明一個new Bc<string, bool>變量,而該類仍然實現了iB<int, int>

您必須更改方法簽名以使其實現iB<int, int>.storeval(int, int)

public void storeval(int p1, int p2) 

如果你改變你的Bc類繼承這樣的泛型參數:

class Bc<X, Y> : iB<X, Y>

你可以像這樣實例化一個:

var bcInt = new Bc<int, int>();

暫無
暫無

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

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