C#

【C#】クラスについて徹底解説します!5分でわかるC#プログラミング【2020年版】

C#でプログラミングをする上で、必然とクラスを定義して利用します。
そして避けては通れないけど、最初に壁になるのは「クラス」ではないでしょうか。

今回はクラスを定義、利用する上で絶対に押さえておかないといけないポイントや忘れがちなものを解説します。

クラス

クラスを定義してみよう!

「クラス」はオブジェクト指向プログラミングをする上で最も重要な概念であります。
そして基礎となるものであり、クラスを正しく理解し使えるようにならないとC#プログラミングで苦戦します。

namespace classPractice
{
    public class Product
    {
        public int Code { get; private set; }
        public string Name { get; private set; }
        public int Price { get; private set; }

        //コンストラクタ
        public Product(int code, string name, int price) 
        {
            this.Code = code;
            this.Name = name;
            this.Price = price;
        }

        //消費税を求める(税率は10%)
        public int GetTax() 
        {
            return (int)(Price * 0.11);
        }

        public int GetPriceInTax() 
        {
            return Price + GetTax();
        }
    }
}

クラスにはデータの他に動作を表すメソッドを定義することができます。
上記のソースでいうとGetTaxはその商品の消費税額を求めるメソッドです。

そしてGetPriceInTaxは税込みの価格を取得するメソッドです。
このようにメソッドの中でメソッドを呼び出すこともできます。

コンストラクタ

クラス名と同じ名前を持った特殊なメソッドです。
コンストラクタの定義に合わせて、プロパティのsetアクセサーのアクセスレベルをprivateに変更しています。

このようにすることで他よりこのクラスのプロパティを設定できなくさせます。
このようなコンストラクタの形のことを「完全コンストラクタ」といいます。

クラスのインスタンスを生成しよう!

クラスを利用するにはまずnew演算子よりクラスのインスタンスを生成します。
インスタンスとは、コンピュータのメモリ上に確保されたクラスの実体のことだと考えてください。

namespace classPractice
{
    class Program
    {
        static void Main(string[] args)
        {
            Product savas = new Product(1,"サバス", 2000);

            int price = savas.Price;
            int taxInPrice = savas.GetPriceInTax();

            Product myProtein = new Product(2, "マイプロテイン", 1600);
            int savasTax = savas.GetTax();
            int myProteinTax = myProtein.GetTax();

         }
    }
}

今回はインスタンスを生成する際に、3つの引数を渡しています。
newすることでこの3つの引数がクラスのプロパティに設定されます。

この時に呼ばれるのが先ほど定義したコンストラクタです。
実は、変数「savas」に値そのものが入っているのではなくデータは別の場所に確保されいます

「savas」変数には、参照先(メモリ上のアドレス)が格納されています。
このようにすることで「savas」変数を通して、商品コードのサバスオブジェクトが利用可能となりました。

オブジェクトを利用してみよう!

実際に生成したオブジェクトを利用した方がイメージがつくので、やってみましょう。
変数名に.(ドット)をつけてクラスのプロパティ名を指定すると値を取り出すことができます。

変数を確認すると正しく値が代入されていることが分かります。
メソッドも同様に呼び出すことができます。

C#では、引数のないメソッドを呼び出す際も()丸括弧が必要です。
このように丸括弧があることで初めてソースを読む人も「これはメソッド」「これはプロパティ」区別することができます。

また、今回のGetTax()のようにコーディングした人が独自で作成できるクラスをカスタムクラスと言います。
一方で.NETFrameworkに定義されているクラスとも機能に際はありますがクラスとしては同じですので、同じように扱います。

インスタンス化は複数可能です

クラスの最大の注意するところは、1つのクラスから複数のインスタンスを作成できる点です。
もしも1つのクラスから1つだけしかオブジェクト生成できない場合は、コンピューターのメモリ上に1つしか値を保存できないわけですから、めちゃくちゃ不便ですよね。

このようにクラスはコンピューターのメモリ上に値を保持し、newすることでそれぞれのオブジェクトを生成することを覚えておいてください。

まとめ「クラス」とは?

今回はクラスについて解説しました。
クラスはプロパティの他に動作を扱う「メソッド」も定義できます。

そしてコンストラクターを定義することで、そのクラスのオブジェクトが生成された時に最初に実行される処理を定義することができます。
大体は初期化処理ということでサンプルソースのように引数の値にプロパティを設定したりします。

クラスはコンピューターのメモリ上に値を保持し、newすることでそれぞれのオブジェクトを生成できます。
またクラスは、1つのクラスから複数のインスタンスを作成できるためソースに汎用性を持たすことができます。

クラスはC#プログラミングでめちゃくちゃ重要かつ必然的に利用するものですので、しっかり理解する必要があります。