這是一個簡單的問題,但我不能在任何地方找到答案:嵌套屬性/在屬性嵌套對象
假設我有一個類:
public class ControlLoop
{
public double Setpoint { get; set; }
public double SetpointHighvalue { get; set; }
public double SetpointLowvalue { get; set; }
}
顯然,過去兩年屬性與第一個有關。我想重新編程類,這樣我可以啓動嵌套像這樣的屬性:
ControlLoop loop7a = new ControlLoop()
{
Setpoint = 7.1,
Setpoint.Highvalue = 20,
Setpoint.Lowvalue = -10,
};
,並用它這樣的:
loop7a.Setpoint = 7.1;
loop7a.Setpoint.Highvalue = 20;
loop7a.Setpoint.Lowvalue = -10;
這在某種程度上可能嗎?
而且要更進一步,假設我有兩個類:
public class ControlLoop
{
public double Setpoint { get; set; }
public ValueRanges SetpointLimits { get; set; } = new ValueRanges();
}
public class ValueRanges
{
public double Highvalue { get; set; }
public double Lowvalue { get; set; }
}
,我希望它使用它像這樣重新編程:
ControlLoop loop7a = new ControlLoop()
{
Setpoint = 7.1,
Setpoint.SetpointLimits.Highvalue = 20,
Setpoint.SetpointLimits.Lowvalue = -10,
};
它這個可能,如何?
更新:我在這裏制定了@tetralobita的建議。它提供了理想的結果,但認爲是是有點「overprogrammed」:
class Program
{
static void Main(string[] args)
{
ControlLoop loop7a = new ControlLoop()
{
Setpoint = new DoubleX(3.4)
{
PointLimits = new ValueRanges()
{
Highvalue = 30,
Lowvalue = -40,
},
},
State = new IntX(1)
{
PointLimits = new ValueRanges()
{
Highvalue = 0,
Lowvalue = 8,
},
},
};
loop7a.Setpoint = 7.1;
loop7a.Setpoint.Value = 7.1;
loop7a.Setpoint.PointLimits.Highvalue = 20;
loop7a.Setpoint.PointLimits.Lowvalue = -10;
loop7a.State = 2;
loop7a.State.PointLimits.Lowvalue = 0;
loop7a.State.PointLimits.Highvalue = 10;
}
}
public class ControlLoop
{
public DoubleX Setpoint { get; set; }
public IntX State { get; set; }
}
public class ValueRanges
{
public Double Highvalue { get; set; }
public Double Lowvalue { get; set; }
}
public class VariableX
{
public ValueRanges PointLimits { get; set; } = new ValueRanges()
{
Highvalue = 1,
Lowvalue = -1,
};
}
public class DoubleX : VariableX
{
public DoubleX(double d)
{
Value = d;
}
public Double Value { get; set; }
public static implicit operator DoubleX(double v)
{
return new DoubleX(v);
}
}
public class IntX : VariableX
{
public IntX(int d)
{
Value = d;
}
public int Value { get; set; }
public static implicit operator IntX(int v)
{
return new IntX(v);
}
}
您是否嘗試過使用一個結構? –
如果您正確構造類型,您可以執行'Setpoint = {Highvalue = 20,Lowvalue = -10}'。 –