gpt4 book ai didi

c# - 指定类本身的泛型类的基类约束

转载 作者:可可西里 更新时间:2023-11-01 08:34:32 27 4
gpt4 key购买 nike

昨天,我正在向我的 friend 解释 C# 的泛型约束。在演示 where T : CLASSNAME 时约束,我掀起了这样的事情:

public class UnusableClass<T> where T : UnusableClass<T>
{
public static int method(T input){
return 0;
}
}

看到它编译时真的很惊讶。然而,经过一番思考,我认为从编译器的角度来看这是完全合法的 - UnusableClass<T>与可以在此约束中使用的任何其他类一样多。

然而,这留下了几个问题:如何使用这个类?是否可以

  1. 实例化它?
  2. 继承它?
  3. 调用它的静态方法int method

如果是,怎么做?

如果这些中的任何一个是可能的,那么T的类型是什么?是吗?

最佳答案

这种方法广泛用于树和其他类似图的结构。在这里你对编译器说,T 有 UnusableClass 的 API。也就是说,您可以按如下方式实现 TreeNode:

public class TreeNode<T>
where T:TreeNode<T>
{
public T This { get { return this as T;} }

public T Parent { get; set; }

public List<T> Childrens { get; set; }

public virtual void AddChild(T child)
{
Childrens.Add(child);
child.Parent = This;
}

public virtual void SetParent(T parent)
{
parent.Childrens.Add(This);
Parent = parent;
}
}

然后像这样使用它:

public class BinaryTree:TreeNode<BinaryTree>
{
}

关于c# - 指定类本身的泛型类的基类约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29228636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com