Я просто столкнулся с проблемой «пользовательских преобразований в интерфейс или из интерфейса не разрешен» в 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
}
Любой знает, как я могу достичь тех же синтаксических результатов в рамках ограничений языка?
Я согласен, мне не нравится ваше использование интерфейсов - его не совсем то, что они предназначены для – 2008-11-21 15:00:28