当前位置:  开发笔记 > 编程语言 > 正文

用户定义的转换到接口

如何解决《用户定义的转换到接口》经验,为你挑选了1个好方法。

我刚刚遇到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
}

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



1> Jon Skeet..:

只需进行实现IDepthFirstSearchTreeIBreadthFirstSearchTree显式实现.这样,成员将无法直接在类型的表达式上调用Graph,但使用"as"(或强制转换)可以使用适当的成员.

我不确定这是我真正做的事情 - 我可能完全摆脱接口并且具有:

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


这段代码只是你的爱好代码吗?如果是这样,那没关系.否则,请注意它是单一的C#,其他开发人员可能会感到困惑.
推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有