如何在C#中的泛型类中使用泛型类的对象?

拉马拉吉T

我有一个通用类。并且该通用类需要与其成员之一具有相同类的另一个实例。

基本上,我正在尝试实现一系列操作。因此,每个班级都必须知道下一项才能继续操作。

ChainedItem(Uri)-> ChainedItem(String)-> ChainedItem(MyClass)-> ....

到目前为止,这是我尝试过的。

public abstract class ChainedItem<T>
{        
    private ChainedItem<R> m_chainedItem;

    public void SetNextChainedItem(ChainedItem<R> chainedItem)
    {
        m_chainedItem = chainedItem;
    }

    public abstract void DoOperation(T data);

    public virtual void ContinueNextOperation<R>(R data)
    {
        if(m_chainedItem != null)
            m_chainedItem.DoOperation(data);
    }
}

但是我不能这样使用它,因为R第3行中尚未定义。

在此处输入图片说明

奥利维尔·罗吉尔(Olivier Rogier)

实际上这是不可能的,因为编译器不支持它,否则将导致编译器的堆栈溢出,这是无休止的,因此是不可能的,因为.NET规范当前定义的通用类型验证比模板中的模板更严格。 C ++。

您可以使用aLinkedList<ChainedItem<>>但菱形运算符,因此C#中不提供真正的通用多态性:

如何在C#中对开放类型进行通用多态?

因此,也许您可​​以使用接口和类型检查(不包括空值)来编写此类代码:

public interface IChainedItem
{
  void DoOperation(object value);
}
public abstract class ChainedItem<T> : IChainedItem
{
  private IChainedItem m_chainedItem;

  public void SetNextChainedItem(IChainedItem chainedItem)
  {
    m_chainedItem = chainedItem;
  }

  public abstract void DoOperation(T data);

  public virtual void ContinueNextOperation(object data)
  {
    if ( m_chainedItem != null )
      m_chainedItem.DoOperation(data);
  }

  public void DoOperation(object value)
  {
    if ( value == null )
      throw new ArgumentNullException();
    var typeIn = value.GetType();
    var typeRequired = typeof(T);
    if ( typeIn != typeRequired )
    {
      string message = $"Bad type in ChainedItem.DoOperation(object): "
                     + $"{typeRequired.Name} is required and not {typeIn.Name}.";
      throw new ArgumentException(message);
    }
    DoOperation((T)value);
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C#中遍历泛型类的属性?

来自分类Dev

如何在C#中使用抽象约束实例化泛型类

来自分类Dev

如何在C#中使用抽象约束实例化泛型类

来自分类Dev

在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

来自分类Dev

如何在类中使用Comparable作为泛型参数

来自分类Dev

如何在TypeScript中使用泛型检测类实例

来自分类Dev

如何在类中使用扩展的泛型类型的类型?

来自分类Dev

如何在参数需要类中使用泛型

来自分类Dev

如何在非泛型静态类的多个方法中使用相同的泛型类型

来自分类Dev

如何在泛型类中返回对象的泛型类型?

来自分类Dev

如何在C#中找到泛型类的属性?

来自分类Dev

如何在泛型类中返回“ this”?

来自分类Dev

如何使用C#泛型将类的对象转换为T类型的对象?

来自分类Dev

如何使用C#泛型将类的对象转换为T类型的对象?

来自分类Dev

C ++中的泛型类

来自分类Dev

如何使用泛型返回泛型类的类类型?

来自分类Dev

如何在C#中从泛型创建对象

来自分类Dev

如何在C#中从泛型创建对象

来自分类Dev

如何在C#中将具有泛型类型的类转换为具有作为泛型类型的对象的类

来自分类Dev

C#如何使用类型为“类型”的对象初始化泛型类

来自分类Dev

C#如何使用类型为“类型”的对象初始化泛型类

来自分类Dev

如何在JAVA中的泛型类中使用override方法

来自分类Dev

如何在C#中收集具有泛型类型的静态类的所有“实例”?

来自分类Dev

如何在C#中访问泛型静态类的所有特定版本?

来自分类Dev

C#如何在方法中获取泛型类引用

来自分类Dev

泛型类使用泛型参数

来自分类Dev

如何从WPF控件继承并在C#中同时使用泛型类?

来自分类Dev

如何在TypeScript中使类泛型成为可选

来自分类Dev

C ++:泛型类中的非泛型方法?

Related 相关文章

  1. 1

    如何在C#中遍历泛型类的属性?

  2. 2

    如何在C#中使用抽象约束实例化泛型类

  3. 3

    如何在C#中使用抽象约束实例化泛型类

  4. 4

    在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

  5. 5

    如何在类中使用Comparable作为泛型参数

  6. 6

    如何在TypeScript中使用泛型检测类实例

  7. 7

    如何在类中使用扩展的泛型类型的类型?

  8. 8

    如何在参数需要类中使用泛型

  9. 9

    如何在非泛型静态类的多个方法中使用相同的泛型类型

  10. 10

    如何在泛型类中返回对象的泛型类型?

  11. 11

    如何在C#中找到泛型类的属性?

  12. 12

    如何在泛型类中返回“ this”?

  13. 13

    如何使用C#泛型将类的对象转换为T类型的对象?

  14. 14

    如何使用C#泛型将类的对象转换为T类型的对象?

  15. 15

    C ++中的泛型类

  16. 16

    如何使用泛型返回泛型类的类类型?

  17. 17

    如何在C#中从泛型创建对象

  18. 18

    如何在C#中从泛型创建对象

  19. 19

    如何在C#中将具有泛型类型的类转换为具有作为泛型类型的对象的类

  20. 20

    C#如何使用类型为“类型”的对象初始化泛型类

  21. 21

    C#如何使用类型为“类型”的对象初始化泛型类

  22. 22

    如何在JAVA中的泛型类中使用override方法

  23. 23

    如何在C#中收集具有泛型类型的静态类的所有“实例”?

  24. 24

    如何在C#中访问泛型静态类的所有特定版本?

  25. 25

    C#如何在方法中获取泛型类引用

  26. 26

    泛型类使用泛型参数

  27. 27

    如何从WPF控件继承并在C#中同时使用泛型类?

  28. 28

    如何在TypeScript中使类泛型成为可选

  29. 29

    C ++:泛型类中的非泛型方法?

热门标签

归档