用子变量(或属性)定义变量

本文关键字:变量 定义 属性 | 更新日期: 2023-09-27 18:12:15

目标是有一个具有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 = "";
    }
}

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

namespace SomeCode
{
    internal class Params
    {
        double diae;
        internal class Diae:IParameter
        {
            get { return diae; }
            set { diae = value; }
        }
    }
}

用子变量(或属性)定义变量

你不能做你想做的——你不能添加额外的属性到现有的类型,如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";

你不会[想要]能够分配一个double到Diae,同时仍然允许它有一个属性Unit。(您可以通过隐式转换或类似的方法来解决这个问题,但我不建议您这样做。)

最好的选择是创建一个类,如Measurement,它将同时具有ValueUnit属性:

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";