gpt4 book ai didi

c# - 搞乱泛型和图形建模

转载 作者:行者123 更新时间:2023-11-30 20:11:03 24 4
gpt4 key购买 nike

我是 C# 和 .NET 的新手。我正在尝试使用异构数据对图形进行建模。我的意思是我希望能够做这样的事情:

// Simple graph modeling using generics
public class Node<T>
{
private T data;
public Node(T data)
{
this.data = data;
}
}

public class Edge<T, U>
{
private T source;
private U destination;

public Edge(T source, U destination)
{
this.source = source;
this.destination = destination;
}
}

这样构建:

Node<Person> p = new Node<Person>(new Person("Red John"));
Node<Computer> c = new Node<Computer>(new Computer("MyComputer"));
graph.AddNode(p);
graph.AddNode(c);
graph.AddEdge(new Edge<Person, Computer>(p, c));

当然,图形类定义不允许我这样做:

public class Graph<T> where T : CommonBaseClass

我也试过为人和计算机定义一个基类,但当然它不起作用。任何帮助/想法建议?我需要异构数据,因为我必须合并不同节点的列表。

感谢您的帮助!

最佳答案

在这种情况下,让您的泛型类从非泛型类派生会很方便。这样,您就可以通过一个简单的 Node 类来引用所有类型的节点:

public class Node 
{
public Node(object data)
{
this.Data = obj;
}

public object Data { get; protected set; }
}

public class Node<T> : Node
{
public Node(T data) : base(data) { }

new public T Data
{
get { return (T)base.Data; }
}
}

如果 object 类型太原始,您可以改用通用约束:

public class Node
{
public Node(IGraphData data)
{
this.Data = obj;
}

public IGraphData Data { get; protected set; }
}

public class Node<T> : Node where T : IGraphData
{
public Node(T data) : base(data) { }

new public T Data
{
get { return (T)base.Data; }
}
}

public class Edge
{
}

public class Edge<T, U> : Edge
where T : Node where U : Node
{
// ...
}

现在,您的 Graph 类可以允许任何类型的 NodeEdge:

public class Graph
{
public void AddNode(Node node) { /* ... */ }
public void AddEdge(Edge edge) { /* ... */ }
}

关于c# - 搞乱泛型和图形建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4262034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com