Kyr*_*o M 2 c# inheritance class derived-class
我有下一个代表图形边和节点的代码(简化为问题):
public class Node
{
}
public class Edge
{
public Node Source { get; set; }
public Node Target { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我想扩展这些类来描述我的拓扑:
public class MineNode : Node
{
public double FanPressure { get; set; }
}
public class MineTunnel : Edge
{
public double Length { get; set; }
public double CrossSectionArea { get; set; }
public MineTunnel()
{
Source = new MineNode();
Target = new MineNode();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我想访问MineNode使用Source和Target属性时提供的其他数据,但我只能访问Node字段,因为它们是在基类中声明的:
MineTunnel t = new MineTunnel();
Console.WriteLine(t.Source.FanPressure); //Error
Run Code Online (Sandbox Code Playgroud)
访问的唯一方法FanPressure是强制Source转换,MineNode但代码变得丑陋.
Console.WriteLine(((MineNode)t.Source).FanPressure); //OK
Run Code Online (Sandbox Code Playgroud)
另一种方法是在基类声明中使用某种方式泛型.但我不确定在我的情况下这是一个好习惯.
那么,我该如何解决这个问题 - 扩展基类字段的功能呢?
谢谢.
您可以Edge使用约束将类型定义为通用类型:
public class Edge<TNode> where TNode: Node
{
public TNode Source { get; set; }
public TNode Target { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您可以通过它将您的MineTunnel类型重新定义为:
public class MineTunnel : Edge<MineNode>
{
// Stuff
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |