带有继承类语法错误的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提供了创建构造函数的功能。但是当它这样做时,语法就失败了。(插入的构造函数似乎也没有任何意义,就其价值而言)

带有继承类语法错误的c#泛型类定义

从泛型类的构造函数行中删除<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) { }
}