Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用c语言实现通用接口#_C#_Generics - Fatal编程技术网

C# 用c语言实现通用接口#

C# 用c语言实现通用接口#,c#,generics,C#,Generics,我们如何将泛型接口继承到泛型类中? 我尝试了下面的代码并得到错误消息:“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

我们如何将泛型接口继承到泛型类中? 我尝试了下面的代码并得到错误消息:“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
{
无效存储值(X p1,Y p2);
void getval();
}
Bc类:iB
{
私人X_dm1;
私人Y_dm2;
公共空存储值(X p1,Y p2)
{
这是.\u dm1=p1;
这个._dm2=p2;
}
public void getval()
{
WriteLine(“{0}\t{1}”,this.\u dm1,this.\u dm2);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
Bc b1=新Bc();
b1.storeval(“AppScienti”,真);
b1.getval();
Console.ReadKey();
}
}

您的代码没有继承泛型接口-它继承了泛型接口的完全定义的实例

由于您继承了
iB
,因此需要实现

public void storeval(int p1, int p2) {
    ...
}
或者,您可以继承
iB
,在这种情况下,您的接口实现可以工作:

class Bc<X,Y> : iB<X,Y> {
    ...
}
Bc类:iB{
...
}
在任何一种情况下,依赖于泛型接口的类型参数的接口方法的参数都需要与继承接口时指定的类型参数相匹配。

使用
class Bc:iB
定义一个新的泛型类,该类具有两个新的泛型类型参数,恰好实现了
iB
。如果将它们重命名为:
类Bc:iB
,则更为清晰

您的两个新泛型类型参数与接口定义的参数无关。现在,当类仍然实现
iB
时,您可以声明一个
新Bc
变量

您必须更改方法签名,使其实现
iB.storeval(int,int)

如果将
Bc
类更改为继承以下通用参数:

class Bc<X, Y> : iB<X, Y>
var bcInt = new Bc<int, int>();
Bc类:iB
您可以这样实例化一个:

class Bc<X, Y> : iB<X, Y>
var bcInt = new Bc<int, int>();
var bcInt=new Bc();