いろいろガンガンいこうぜ。体も大事に

普段はJavaでAndroidアプリ開発しているプログラマーのブログです。

C#のプロパティを使ってみた。

class Person
{

	private string name;
	private int age;

	public Person (string name, int age)
	{
		this.name = name;
		this.age = age;
	}
	
	public string GetName ()
	{
		return name;
	}

	public int GetAge ()
	{
		return age;
	}

	public void SetAge (int age)
	{
		this.age = age;
	}
		
	public override string ToString ()
	{
		return string.Format ("[{0} : age {1}]", name, age);
	}
}

というクラスをプロパティを使って書き換えてみました。
こんなかんじですかね。


class Person
{
		
	public Person(string name, int age)
	{
		this.Name = name;
		this.Age = age;
	}

	public string Name { private set; get; }
	public int Age{ set; get; }

	public override string ToString ()
	{
		return string.Format ("[{0} : age {1}]", Name, Age);
	}
}


短い!
いいですね。これ。


ただ外からこれを使う時に,

person.GetName()

でなくて,

person.Name


とするのが,今は違和感を感じます。




考察?とか


プロパティは,
使う側から見るとインスタンス変数に見えて,
実装する側から見るとメソッドと同じように実装が出来る
だそうで。


実装が変わった時その影響範囲が広くなってしまうため,
publicなフィールド(インスタンス変数)でなく,
privateなフィールドで,それに対するアクセッサメソッドを定義するべき,
というのは,いろいろな本で言及されています。

プロパティーを使うと非常に短く,アクセッサーを実装できていいですね。


プロパティーの細かい実装も定義できるようで,以下のようにも書けるようです。

class Person
{

	private string name;

	public Person(string name, int age)
	{
		this.name = name;
		this.Age = age;
	}

	public string Name
	{
		get{
			return name;
		}
	}

	public int Age{ set; get; }

	public override string ToString ()
	{
		return string.Format ("[{0} : age {1}]", Name, Age);
	}
}

以上です。

また会えることを祈りつつ。