c# – 用户定义的转换到接口

我刚刚遇到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() { ... }

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...