我已经查看了一些与定义继承基类的泛型类相关的问题,但没有看到这种情况。 (对不起,如果我错过了。)
我的班级是通用班级。它继承了一个具体的基类。基类的构造函数接受参数。
如果我删除了通用规范,我可以使类定义工作,如下所示:
public class DataItemType : DataItem
{
public DataItemType(string sNameArg, string sAddressArg, bool nWriteAllowedArg)
: base(sNameArg, sAddressArg, nWriteAllowedArg)
{
}
}
以下是通用规范的定义。
public class DataItemType<TValue> : DataItem where TValue : struct
{
public DataItemType<TValue>(string sNameArg, string sAddressArg, bool nWriteAllowedArg)
: base(sNameArg, sAddressArg, nWriteAllowedArg)
{
}
}
在类定义行中,IDE抱怨没有给出对应于基类所需的形式参数sNameArg的参数。 IDE提供了创建构造函数的功能。但是当它发生时,语法失败。 (插入的构造函数似乎也没有任何意义,因为它的价值。)
答案 0 :(得分:4)
只需从泛型类中的构造函数行中删除<TValue>
:
public class DataItem
{
public DataItem(string sNameArg, string sAddressArg, bool nWriteAllowedArg) {}
}
public class DataItemType<TValue> : DataItem where TValue : struct
{
public DataItemType(string sNameArg, string sAddressArg, bool nWriteAllowedArg)
: base(sNameArg, sAddressArg, nWriteAllowedArg)
{
}
}
泛型类中TValue
的使用是针对传递给函数或返回值的参数。但不是构造函数。
在功能之后添加<>
会让您感到困惑。在那里添加意味着函数本身是通用的,并且可以接收不同的类型。
例如,如果您想在构造函数中接收来自泛型类型的参数:
public class DataItemType<TValue> : DataItem where TValue : struct
{
public DataItemType(TValue someParameter, string sNameArg, string sAddressArg, bool nWriteAllowedArg)
: base(sNameArg, sAddressArg, nWriteAllowedArg)
{
}
//Note that as in the constructor you can use this generic type for the function
public void SomeFunction(TValue value) { }
//Or define a new generic type which will be only in the scope of this function
public void SomeOtherFunction<TValue2>(TValue2 value2) { }
}