我一直在研究一些电网模拟软件(ElecNetKit)。在电网中,有时使用单相模型很方便,有时使用三相模型。
因此,我希望能够将其中一个电气网络元素表示为:
class Bus
{
public Complex Voltage {set; get;} //single phase property
}
但同时以一种方式,以便用户可以调用Bus.Voltage.Phases[x]
,并期望 aComplex
为任何有效的整数x
。
该Bus.Voltage
属性应Bus.Voltage.Phases[1]
在被视为 时映射到Complex
。
我这里有两个问题:
- 这是否违反任何 OOP 原则?我有一种感觉,可能是。
- 有没有一种方便的方法可以在 C# 中表示它?
在表示方面,我尝试过:
- 一个 class
Phased<T> : T
,但这与打字系统不兼容,并且 - 一个
Phased<T>
具有通用转换器类型的类T
,但仍需要调用转换器。
我知道我可以简单地使用类似的东西:
public Dictionary<int,Complex> VoltagePhases {private set; get;}
public Complex Voltage {
set {VoltagePhases[1] = value;}
get {return VoltagePhases[1];}
}
但是,一旦您开始对多个属性、跨多个类执行此操作,就会有很多重复。