C# プロパティ リベンジ2
そういえば、細かいことなんですが、
C# て namespace なくても動くんですね
using System;
// クラス定義
class Complex
{
// 実装は外部から隠蔽(privateにしておく)
private double re; // 実部を記憶しておく
private double im; // 虚部を記憶しておく
// 実部の取得・変更用のプロパティ
public double Re
{
set { this.re = value; }
get { return this.re; }
}
/* ↑のコードは意味的には以下のコードと同じ。
public void SetRe(double value){this.re = value;}
public double GetRe(){return this.re;}
メソッドと同じ感覚で使える。
*/
// 実部の取得・変更用のプロパティ
public double Im
{
set { this.im = value; }
get { return this.im; }
}
// 絶対値の取得用のプロパティ
public double Abs
{
// 読み取り専用プロパティ。
// setブロックを書かない。
get { return Math.Sqrt(re * re + im * im); }
}
}
// クラス利用側
class PropertySample
{
static void Main()
{
Complex c = new Complex();
c.Re = 4; // Reプロパティのsetアクセサーが呼び出される。
c.Im = 3; // Imプロパティのsetアクセサーが呼び出される。
Console.Write("|{0} + ", c.Re); // Reプロパティのgetアクセサーが呼び出される。
Console.Write("{0}i| =", c.Im); // Imプロパティのgetアクセサーが呼び出される。
Console.Write(" {0}\n", c.Abs); // Absプロパティのgetアクセサーが呼び出される。
}
}
記述してみた感想としては、
変数だけで、処理を片付けられて非常に便利。
という印象でした。
確かに無駄な引数やメソッドを使って
コードが長くなることがないきのうだなー。と
感覚的には
変数に数字を代入して
呼び出すだけで処理もやってくれてる。
そんな感覚がします。
もう少し、ちゃんと研究したい。
public double Abs
{
// 読み取り専用プロパティ。
// setブロックを書かない。
get { return Math.Sqrt(re * re + im * im); }
}
特にここの処理は