C# 扩展基类字段功能
下面是表示图边和节点的代码(问题简化): 现在我想扩展这些类来描述我的拓扑:C# 扩展基类字段功能,c#,class,inheritance,derived-class,C#,Class,Inheritance,Derived Class,下面是表示图边和节点的代码(问题简化): 现在我想扩展这些类来描述我的拓扑: public class MineNode : Node { public double FanPressure { get; set; } } public class MineTunnel : Edge { public double Length { get; set; } public double CrossSectionArea { get; set; } public
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();
}
}
问题是,在使用源和目标属性时,我想访问MineNode
提供的其他数据,但我只能访问节点
字段,因为它们是在基类中声明的:
MineTunnel t = new MineTunnel();
Console.WriteLine(t.Source.FanPressure); //Error
访问fanpression
的唯一方法是将Source
投射到MineNode
上,但这样代码会变得丑陋
Console.WriteLine(((MineNode)t.Source).FanPressure); //OK
另一种方法是在基类声明中使用泛型。但我不确定在我的情况下这是否是一个好的做法
那么,如何解决这样的问题——扩展基类字段的功能呢
谢谢。我认为仿制药是这里的发展方向
试试这个:
public class Node
{
}
public class Edge<S, T>
where S : Node
where T : Node
{
public S Source { get; set; }
public T Target { get; set; }
}
您可以将Edge
类型定义为泛型,并带有以下约束:
public class Edge<TNode> where TNode: Node
{
public TNode Source { get; set; }
public TNode Target { get; set; }
}
为什么有边缘扩展节点?哦,对不起,这不是故意的。我想在我写类头的时候,它滑到了那里。为什么源节点和目标节点有不同的类型?因为我认为边缘可能从MineNode到YourNode。您可以为源和目标指定不同的类型。不同的泛型类型可以,但我将始终使用相同的类型。所有的答案都是正确的,但是你的速度快了一点。
public class MineNode : Node
{
public double FanPressure { get; set; }
}
public class MineTunnel : Edge<MineNode, MineNode>
{
public double Length { get; set; }
public double CrossSectionArea { get; set; }
public MineTunnel()
{
Source = new MineNode();
Target = new MineNode();
}
}
MineTunnel t = new MineTunnel();
Console.WriteLine(t.Source.FanPressure); // Now this works without errors ;)
public class Edge<TNode> where TNode: Node
{
public TNode Source { get; set; }
public TNode Target { get; set; }
}
public class MineTunnel : Edge<MineNode>
{
// Stuff
}