C#学習ノート(4)

1661 ワード

今日はまず前のいくつかのシリーズをまとめて、ここではオブジェクト向け版の簡易計算機を提供します(オブジェクト向けの思想を理解することに重点を置きます).
1.まず計算機クラス(クラスライブラリ)を定義する(Calculator)
public abstract class Calculator

    {

        public int Number1

        {

            get;

            set;

        }

        public int Number2

        {

            get;

            set;

        }

        //2 

        public Calculator()

        {



        }

        public Calculator(int n1,int n2)

        {

            this.Number1 = n1;

            this.Number2 = n2;

        }

        public abstract int Jisuan();


ここでのJisuan()メソッドは,将来どの演算を行うか分からないため,抽象メソッドとして設計されている(この場合,抽象メソッドが存在するクラスも抽象的でなければならない).このメソッドは、特定のクラスによって書き換えられます.
2.次にクラスライブラリを新規作成します(加算):
public class AddFa : Calculator

    {

        public AddFa(int n1,int n2):base(n1,n2)

        {



        }

        public override int Jisuan()

        {

            return Number1 + Number2;

        }

    }


親クラスCalculatorクラスのメソッドJisuan()を書き換えました.親クラスにはパラメータのある構造関数があるので、これ以上書く必要はありません.親クラスを呼び出せばいいです(継承のメリット).
3.最後に加算演算を呼び出す場合は、加算クラスをインスタンス化し、Jisuan()メソッドを呼び出すだけで実現できます.(四則演算における他のクラスライブラリは順次類推)
 
値タイプと参照タイプ:
値タイプとは、値がスタックに格納されるタイプです.C#中値タイプが多い:int,float,decimal,double......
参照タイプは値がスタックに格納、スタックに格納されるのは値がスタック内のスタックアドレス、例えばStringである.
 
値の伝達と参照の伝達;
値タイプがパラメータとして渡されると、スタックにコピーされるのは値のコピーであり、コピーの値を変更しても元の内容に影響しません.
参照タイプがパラメータとして渡されると、スタックにコピーされたのはスタックアドレスであり、コピーの値を変更して元の内容に影響します.(キーワード:ref)
注意:outキーワードはrefとは異なり、outはパラメータをメソッド外で初期化しなくてもよい(値を付与しなくても値を付与しなくても始まらない)ことを要求し、メソッド内でoutパラメータに値を付与しなければならない.メソッドの実行が完了すると、outパラメータは値を持ち出す.