作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
昨天,我正在向我的 friend 解释 C# 的泛型约束。在演示 where T : CLASSNAME
时约束,我掀起了这样的事情:
public class UnusableClass<T> where T : UnusableClass<T>
{
public static int method(T input){
return 0;
}
}
看到它编译时真的很惊讶。然而,经过一番思考,我认为从编译器的角度来看这是完全合法的 - UnusableClass<T>
与可以在此约束中使用的任何其他类一样多。
然而,这留下了几个问题:如何使用这个类?是否可以
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/
我是一名优秀的程序员,十分优秀!