用户定义的转换到接口

我刚刚遇到C#中的“用户定义的转换到接口或来自接口的转换”问题。 我试图做的是创建一个通用的Graph类,可以通过几种不同的方式迭代,具体取决于支持的接口。 所以:

public class Graph : IBreadthFirstSearchTree, IDepthFirstSearchTree { // unnecessary details public static explicit operator IBreadthFirstSearchTree(Graph g) { g.enumerator = new GraphEnumerator(g, SortStrategy.BreadthFirst); return g as IBreadthFirstSearchTree; } public static explicit operator IDepthFirstSearchTree(Graph g) { g.enumerator = new GraphEnumerator(g, SortStrategy.DepthFirst); return g as IDepthFirstSearchTree; } } 

用于此用途:

 foreach (GraphNode gn in myGraph as IDepthFirstSearchTree) { // do stuff with gn } 

任何人都知道如何在语言的约束下实现相同的语法结果?

只需实现IDepthFirstSearchTreeIBreadthFirstSearchTree显式实现。 这样,成员将无法直接在Graph类型的表达式上调用,但使用“as”(或强制转换)可以使用相应的成员。

我不确定那是我真正做的事情 – 我可能完全摆脱界面并且有:

 public IEnumerable IterateBreadthFirst() { ... } public IEnumerable IterateDepthFirst() { ... }