Mendefinisikan variabel dengan subvariabel (atau dengan properti)

Targetnya adalah memiliki variabel dengan properti Unit, yang dapat diakses misalnya:

Params MyParams;    

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

Idealnya, variabel Diae adalah anggota Param Kelas dan harus Mewarisi properti Unit dari kelas IParameter:

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

    internal IParameter()
    {
        unit = "";
    }

}

Bagaimana cara mendeklarasikan variabel Diae? Berikut ini cuplikan kode kuasi dari deklarasi yang diharapkan:

namespace SomeCode
{
    internal class Params
    {
        double diae;

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

person Jan    schedule 06.05.2013    source sumber
comment
Saya tidak mengerti, apa sebenarnya yang Anda inginkan? Kelas yang berisi double Value dan string Unit? Apa tujuan akhir Anda?   -  person ppetrov    schedule 06.05.2013
comment
Itu akan menambah kompleksitas (Anda memerlukan dua kelas) tanpa manfaat yang terlihat.   -  person Steve Wellens    schedule 06.05.2013
comment
Variabel yang dideklarasikan sebagai objek String mempunyai kemungkinan mempunyai nilai. Dan dimungkinkan untuk mengakses panjang variabel dengan menambahkan .Length variabel. Saya menargetkan hal serupa. Pengaksesan nilai variabel terjadi lebih sering daripada unitnya, oleh karena itu implementasi yang diinginkan   -  person Jan    schedule 06.05.2013


Jawaban (2)


Anda tidak dapat melakukan apa yang Anda inginkan -- Anda tidak dapat menambahkan properti tambahan ke tipe yang sudah ada seperti double, jadi Anda harus membuat Diae mengembalikan kelas terpisah. Sesuatu seperti ini:

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

Kemudian Anda dapat melakukan:

Params MyParams = new Params();    

MyParams.Diae.Value = 100.0;
MyParams.Diae.Unit = "kg";
person Jeremy Todd    schedule 06.05.2013

Anda tidak akan [ingin] dapat menetapkan ganda ke Diae sambil tetap mengizinkannya memiliki properti Unit. (Anda dapat menyiasatinya melalui konversi implisit atau semacamnya, tetapi saya tidak menyarankan Anda melakukannya.)

Pilihan terbaik adalah membuat kelas seperti Measurement yang akan memiliki properti Value dan Unit:

public class Measurement
{
    public double Value {get;set;}
    public string Unit {get;set;}
}

Maka Diae bisa bertipe seperti itu:

internal class Params
{
    public Measurement Diae {get;private set}
    public Params()
    {
        Diae = new Measurement();
    }
}

Sekarang Anda dapat melakukan:

Params MyParams = new Params();    

MyParams.Diae.Value = 100.0;
MyParams.Diae.Unit = "kg";
person Servy    schedule 06.05.2013
comment
Bagaimana dengan membuat ekstensi ke objek Double intrinsik. Apakah ini bersih? - person Jan; 06.05.2013
comment
@ Jansk83 Seperti yang saya katakan dalam jawaban saya, itu mungkin, tetapi tidak diinginkan. - person Servy; 06.05.2013