c# – 用户定义的转换到接口
发布时间:2020-12-16 01:29:17 所属栏目:百科 来源:网络整理
导读:我刚刚遇到C#中的“用户定义的转换到接口或来自接口的转换”问题.我试图做的是创建一个通用的Graph类,可以通过几种不同的方式迭代,具体取决于支持的接口.所以: public class GraphT : IBreadthFirstSearchTreeT,IDepthFirstSearchTreeT{ // unnecessary det
我刚刚遇到C#中的“用户定义的转换到接口或来自接口的转换”问题.我试图做的是创建一个通用的Graph类,可以通过几种不同的方式迭代,具体取决于支持的接口.所以:
public class Graph<T> : IBreadthFirstSearchTree<T>,IDepthFirstSearchTree<T> { // unnecessary details public static explicit operator IBreadthFirstSearchTree<T>(Graph<T> g) { g.enumerator = new GraphEnumerator<T>(g,SortStrategy.BreadthFirst); return g as IBreadthFirstSearchTree<T>; } public static explicit operator IDepthFirstSearchTree<T>(Graph<T> g) { g.enumerator = new GraphEnumerator<T>(g,SortStrategy.DepthFirst); return g as IDepthFirstSearchTree<T>; } } 是用于此用途: foreach (GraphNode<T> gn in myGraph as IDepthFirstSearchTree) { // do stuff with gn } 任何人都知道如何在语言的约束下实现相同的语法结果? 解决方法
只需实现IDepthFirstSearchTree< T>和IBreadthFirstSearchTree< T>显式实现.这样,成员将无法直接在Graph< T>类型的表达式上调用,但使用“as”(或强制转换)可以使用适当的成员.
我不确定这是我真正做的事情 – 我可能完全摆脱界面并且: public IEnumerable<T> IterateBreadthFirst() { ... } public IEnumerable<T> IterateDepthFirst() { ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |