Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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# 泛型专门化基构造函数调用了错误的方法 类基 { 受保护底座(T1类型1、T2类型2) { } } 派生的公共类:基 { 公共派生(T类型1,int i) :基本(类型1,i) { } } 派生的公共类:基 { 公共派生(T类型1,双d) :基本(类型1,d) { } }_C#_Generics - Fatal编程技术网

C# 泛型专门化基构造函数调用了错误的方法 类基 { 受保护底座(T1类型1、T2类型2) { } } 派生的公共类:基 { 公共派生(T类型1,int i) :基本(类型1,i) { } } 派生的公共类:基 { 公共派生(T类型1,双d) :基本(类型1,d) { } }

C# 泛型专门化基构造函数调用了错误的方法 类基 { 受保护底座(T1类型1、T2类型2) { } } 派生的公共类:基 { 公共派生(T类型1,int i) :基本(类型1,i) { } } 派生的公共类:基 { 公共派生(T类型1,双d) :基本(类型1,d) { } },c#,generics,C#,Generics,我上面的代码无法编译,因为Visual Studio将第二个派生类型的构造函数的基调用标记为“MyBase.MyBase(T,int)”,我希望它实际调用的是“MyBase.MyBase(T,double)” 删除或重命名第一个派生类型(即DerivedInt)可使第二个派生类型正确编译 我的问题是,为什么会发生这种情况? 我真的不确定是什么导致了这种行为?一阶导数类型与二阶导数类型如何冲突? 除了上面提到的更名,还有什么办法可以解决这个问题吗?或者也许是解决这个问题的更好方法 干杯在同一名称空

我上面的代码无法编译,因为Visual Studio将第二个派生类型的构造函数的基调用标记为“MyBase.MyBase(T,int)”,我希望它实际调用的是“MyBase.MyBase(T,double)”

删除或重命名第一个派生类型(即DerivedInt)可使第二个派生类型正确编译

我的问题是,为什么会发生这种情况? 我真的不确定是什么导致了这种行为?一阶导数类型与二阶导数类型如何冲突? 除了上面提到的更名,还有什么办法可以解决这个问题吗?或者也许是解决这个问题的更好方法


干杯

在同一名称空间中有两种类型称为
派生的
。这是不允许的

它们有不同的基类并不意味着它们有不同的名称


如果您要编写
typeof(派生)
您会选择哪一种类型?

Hmm,您不能在同一名称空间下有两个名称相同的类型(即
Derived
)。这就是为什么重命名其中一个会起作用。

实际上名称是
Derived`1
。为了区分类型,类型参数的名称并不重要,只是它们的编号。通用参数约束也不重要。
class Base<T1, T2>
{
    protected Base(T1 type1, T2 type2)
    {
    }
}

public class Derived<T> : Base<T, int>
{
    public Derived(T type1, int i)
        : base(type1, i)
    {
    }
}

public class Derived<T> : Base<T, double>
{
    public Derived(T type1, double d)
        :base(type1, d)
    {
    }
}