Visual C# でクラスとオブジェクトを作成する方法


Microsoft Visual Basic .NET を使用する場合は、307210 をご覧ください。

概要


このステップバイステップの記事では、C# で野球チームを表す新しいクラスを作成する方法を説明しています。 クラスのフィールド、メソッド、およびプロパティを定義します。 次に、このクラス型のオブジェクトを作成して、そのメソッドとプロパティを使用します。

C# は、オブジェクト指向のプログラミング言語です。 アプリケーションで型を表すクラスを定義して、これらのクラスのインスタンスとしてオブジェクトを作成します。 クラスはフィールド、メソッド、プロパティ、およびインデクサを含むことができます。

必要条件

以下の予備知識が必要です。
  • C# の構文
  • オブジェクト指向の概念

新しいコンソール アプリケーションの作成

  1. Visual Studio .NET または Visual Studio 2005 を起動して、ClassesAndObjects という名前の新しい C# コンソール アプリケーション プロジェクトを作成します。
  2. プロジェクトを保存します。

新しいクラスの作成

  1. [プロジェクト] メニューの [クラスの追加] をクリックします。
  2. [新しい項目の追加] ダイアログ ボックスで、[クラス名] に BaseballTeam と入力して、[開く] をクリックします。

    注: Visual C# 2005 では、[開く] が [追加] に変更されています。
  3. コード ビュー ウィンドウで、新しいクラスのコードを確認します。

フィールドとコンストラクタの定義

  1. [表示] メニューの [クラス ビュー] をクリックします。 [クラス ビュー] ウィンドウで、[ClassesAndObjects] プロジェクトを展開し、[ClassesAndObjects] 名前空間を展開します。 [BaseballTeam] クラスを右クリックして、[追加] を クリック し、[フィールドの追加] をクリックします。

    注: Visual C# 2005 には、いくつかのデザイン変更があります。 詳細については、次のマイクロソフト Web サイトを参照してください。
  2. [C# フィールド ウィザード] で、[フィールド アクセス] を [private] に設定し、[フィールドの種類] を [string] に設定します。 [フィールド名] に name と入力します。 [完了] をクリックします。 クラスに以下のフィールドが追加されます。
    private string name;
  3. 手順 1. と 2. を繰り返し (または手動でコードを入力して)、別のフィールドを次のように追加します。
    private string stadium;
  4. さらに 2 つのフィールドを追加して、フィールドの初期値を次のように設定します。
    private int wins = 0;
    private int defeats = 0;
  5. クラスのコンストラクタを変更して、チームの名前と球場を初期化します。
    public BaseballTeam(string n, string s)
    {
    this.name = n;
    this.stadium = s;

    }

メソッドの定義

  1. [クラス ビュー] で、[BaseballTeam] クラスを右クリックします。 [追加] をクリックして、[メソッドの追加] をクリックします。

    注: Visual C# 2005 には、いくつかのデザイン変更があります。 詳細については、次のマイクロソフト Web サイトを参照してください。
  2. [メソッド アクセス] を [public] に設定し、[戻り値の型] を [void] に設定します。 [メソッド名] に PlayGame と入力します。 runsForrunsAgainst という名前の 2 つの int 型のパラメータを追加します。 [完了] をクリックします。 これによって、次のメソッドがクラスに追加されます。
    public void PlayGame(int runsFor, int runsAgainst)
    {

    }
  3. メソッドの本体を次のように定義します。
    public void PlayGame(int runsFor, int runsAgainst)
    {
    if (runsFor > runsAgainst)
    this.wins++;
    else
    this.defeats++;

    }
  4. C# のすべてのクラスは、最終的に Object と呼ばれる基本クラスから継承します。 このクラスはすべてのクラスに共通の機能を定義します。 例は、クラスの状態の文字列形式を返す ToString メソッドです。 BaseballTeam クラスでこのメソッドを次のようにオーバーライドします。
    public override string ToString()
    {
    return this.name + ", play at " + this.stadium + ": " +
    " W" + this.wins + " L" + this.defeats;

    }

オーバーロードされるメソッドの定義

C# はオーバーロードされたメソッドをサポートします。このメソッドは、同じ名前を持ちますが、異なるシグネチャを持つメソッドです。 手順 2. では、試合の結果をパラメータとして受け取るオーバーロード バージョンの PlayGame メソッドを定義しています。

  1. 最初に、BaseballTeam クラスの enum を次のように定義します。
    public enum Result {Win, Lose}
  2. PlayGame という別のメソッドを次のように作成します。
    public void PlayGame(Result r)
    {
    if (r == Result.Win)
    this.wins++;
    else if (r == Result.Lose)
    this.defeats++;

    }

プロパティの定義

  1. [クラス ビュー] で、[BaseballTeam] クラスを右クリックして、 [追加] をクリックし、[プロパティの追加] をクリックします。

    注: Visual C# 2005 には、いくつかのデザイン変更があります。 詳細については、次のマイクロソフト Web サイトを参照してください。
  2. [プロパティ アクセス] を [public] に設定し、[プロパティの種類] を [double] に設定します。 [プロパティ名] に Record と入力します。 [get] をクリックして、[完了] をクリックします。 これによって、次のプロパティがクラスに追加されます。
    public double Record
    {
    get
    {
    return 0;
    }

    }
  3. プロパティを次のように変更すると、これは野球チームの試合成績を返します (たとえば、チームが試合で 10 勝 10 敗すると、その勝率は 0.5 です)。
    public double Record
    {
    get
    {
    int played = this.wins + this.defeats;
    return (double)this.wins / played;
    }

    }
  4. Ballpark という名前の get/set プロパティを次のように追加します。 このプロパティは、野球チームの stadium フィールドの読み取り、または変更を可能にします。
    public string Ballpark
    {
    get
    {
    return this.stadium;
    }
    set
    {
    this.stadium = value; // value is an implicit parameter
    }

    }

オブジェクトの作成と使用

  1. Class1.cs のコードをコード ビュー ウィンドウに表示します。
  2. Main メソッドで、new 演算子を使用して、BaseballTeam オブジェクトを作成します。 オブジェクト参照をローカルな BaseballTeam 変数に次のように代入します。
    BaseballTeam sf = new BaseballTeam("San Francisco Giants", 
    "Candlestick Park");
  3. 次のコードを追加して、オブジェクトのパブリック メソッドをテストします。
    sf.PlayGame(7, 2);
    sf.PlayGame(BaseballTeam.Result.Lose);
  4. オブジェクトのプロパティを使用する次のステートメントを追加します。
    Console.Out.WriteLine("Record: " + sf.Record);
    sf.Ballpark = "3Com Park";
  5. 次のように、オブジェクトの現在の状態を表示します。
    Console.Out.WriteLine(sf.ToString());
  6. オブジェクト参照を null に設定すると、BaseballTeam オブジェクトが必要なくなったことを示します。 この結果、オブジェクトはガーベジ コレクションの対象になります (C# には delete 演算子がないことに注意してください)。
    sf = null;

動作の検証

  1. アプリケーションをビルドし、実行します。
  2. アプリケーションによりコンソールに次の情報が表示されるかどうかを確認します。
    Record: 0.5
    San Francisco Giants, play at 3Com Park: W1 L1