У меня есть следующий код, который представляет ребра и узлы графа (упрощенно для вопроса):
public class Node
{
}
public class Edge
{
public Node Source { get; set; }
public Node Target { get; set; }
}
Теперь я хочу расширить эти классы для описания топологии шахты:
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
при использовании свойств Source
и Target
, но я могу получить доступ только к полям Node
, поскольку они объявлены в базовом классе:
MineTunnel t = new MineTunnel();
Console.WriteLine(t.Source.FanPressure); //Error
Единственный способ получить доступ к FanPressure
- привести Source
к MineNode
, но код станет таким уродливым.
Console.WriteLine(((MineNode)t.Source).FanPressure); //OK
Другой способ, возможно, заключается в использовании каких-либо обобщений в объявлении базового класса.Но я не уверен, что это хорошая практика в моей ситуации.
Итак, как я могу решить эту проблему - расширить функциональность полей базового класса?
Спасибо.