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

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

C#で単純なクラスを定義してみた。

名前と年齢を表すフィールドと,そのアクセッサー。
そして,toStringをオーバーライド。
これだけの単純なクラスをC#で作りたいと思います。
Javaだとこんな感じですかね。


public class Person {
    private String mName;
    private int mAge;

    public Person(String name, int age) {
        mName = name;
        mAge = age;
    }

    public String getName() {
        return mName;
    }

    public int getAge() {
        return mAge;
    }

    public void setAge(int age) {
        mAge = age;
    }

    @Override
    public String toString() {
        return String.format("[%s : age %d]", mName, mAge);
    }
}


使う側。

public static void main(String[] args) {

    Person taro = new Person("Taro", 24);
    System.out.println(taro);

    System.out.println(String.format("%s is %d years old.", taro.getName(), taro.getAge()));
    taro.setAge(taro.getAge() + 1);
    System.out.println("A year later.");
    System.out.println(String.format("%s is %d years old.", taro.getName(), taro.getAge()));

    System.out.println(taro);

}


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


使う側は,

public static void Main (string[] args)
{
	Person taro = new Person ("taro", 24);
	Console.WriteLine (taro);
			
	Console.WriteLine (string.Format ("{0} is {1} years old.", taro.GetName(), taro.GetAge()));
	taro.SetAge(taro.GetAge() + 1);
	Console.WriteLine ("A year later.");
	Console.WriteLine ("{0} is {1} years old.", taro.GetName(), taro.GetAge());
			
	Console.WriteLine (taro);

}

フィールド・インスタンス変数の命名規約

Code Style Guidelines for Contributorsに沿ってJavaを書く際自分は,
privateで否staticなフィールド名には,「m」をつけています。

C#の方は,
技術評論社さんの"読みやすく効率的なコードの原則 C#ルールブック"の56ページ。
「2.12.3 public 以外のインスタンス変数はCamel形式にする」に従い,
フィールド(C#だからインスタンス変数か)Camel形式にしました。


@Overrideとoverride修飾子

Javaの方のコードの場合,@Overrideアノテーションがなくとも動作する。
しかしC#の方のToStringメソッドはoverride修飾子が無い場合,
期待した動作をせず,だたクラス名を返す挙動をしました。


ToStringメソッドはスーパークラスで定義され,
Personクラスでそれをオーバーライドしたメソッドでしょうから,
継承関係の事項を学習した時にまたそのあたりを確認したいと思います。





次はプロパティ当りをまとめたいと思います。
それでは,また会えることを祈りつつ。