带有继承类语法错误的c#泛型类定义
本文关键字:泛型类 定义 错误 语法 继承 | 更新日期: 2023-09-27 18:13:09
我看过许多与定义继承基类的泛型类相关的问题,但没有看到这种情况。(对不起,如果我错过了。)
我的类是一个泛型类。它继承一个具体的基类。基类的构造函数接受实参。如果我消除泛型规范,我可以使类定义工作,如下所示:
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提供了创建构造函数的功能。但是当它这样做时,语法就失败了。(插入的构造函数似乎也没有任何意义,就其价值而言)
从泛型类的构造函数行中删除<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) { }
}