C# 使用子变量(或属性)定义变量

C# 使用子变量(或属性)定义变量,c#,inheritance,properties,declaration,C#,Inheritance,Properties,Declaration,目标是拥有一个具有Unit属性的变量,可通过以下方式访问: Params MyParams; MyParams.Diae = 100.0; MyParams.Diae.Unit = "kg"; 理想情况下,变量Diae是类Params的成员,应该从类IParameter继承Unit属性: internal class IParameter { string unit; internal string Unit { get; set; } internal I

目标是拥有一个具有Unit属性的变量,可通过以下方式访问:

Params MyParams;    

MyParams.Diae = 100.0;
MyParams.Diae.Unit = "kg";
理想情况下,变量Diae是类Params的成员,应该从类IParameter继承Unit属性:

internal class IParameter
{
    string unit;
    internal string Unit { get; set; }

    internal IParameter()
    {
        unit = "";
    }

}
如何声明Diae变量?以下是预期声明的准代码片段:

namespace SomeCode
{
    internal class Params
    {
        double diae;

        internal class Diae:IParameter
        {
            get { return diae; }
            set { diae = value; }
        }
    }
}

您将[不希望]能够将double分配给
Diae
,同时仍允许它具有属性
单元
。(你可以通过隐式转换或类似的方式来解决这个问题,但我不鼓励你这么做。)

最好的选择是创建一个类,例如
Measurement
,该类将同时具有
单位
属性:

public class Measurement
{
    public double Value {get;set;}
    public string Unit {get;set;}
}
然后,
Diae
可以是该类型:

internal class Params
{
    public Measurement Diae {get;private set}
    public Params()
    {
        Diae = new Measurement();
    }
}
现在您可以执行以下操作:

Params MyParams = new Params();    

MyParams.Diae.Value = 100.0;
MyParams.Diae.Unit = "kg";
Params MyParams = new Params();    

MyParams.Diae.Value = 100.0;
MyParams.Diae.Unit = "kg";

您不能完全按照自己的意愿执行操作——您不能向现有类型(如
double
)添加额外的属性,因此必须使
Diae
返回一个单独的类。大概是这样的:

internal class ParamWithUnit
{
  public string Unit { get; set; }
  public double Value { get; set; }
}

internal class Params
{
  private ParamWithUnit diae = new ParamWithUnit();

  public ParamWithUnit Diae 
  {
    get { return this.diae; }
  }
}
然后你可以做:

Params MyParams = new Params();    

MyParams.Diae.Value = 100.0;
MyParams.Diae.Unit = "kg";
Params MyParams = new Params();    

MyParams.Diae.Value = 100.0;
MyParams.Diae.Unit = "kg";

我不明白,你到底想要什么?包含
双值
字符串单元
的类?您的最终目标是什么?这将增加复杂性(您将需要两个类),而没有任何明显的好处。声明为对象字符串的变量可能有一个值。并且可以通过追加变量的.length来访问变量的长度。我的目标是类似的东西。访问变量的值比访问它的单位更频繁,因此所需的实现对内在的Double对象进行扩展怎么样。这会是“干净的”吗?@Jansk83正如我在回答中所说,这是可能的,但不可取。