独習C#勉強メモ2

独習C#を読んで自分が知らなかったことまとめ

メソッドのオーバーロード

オーバーロードとは、1つのクラスに同じ名前のメソッドを複数定義すること 引数によって処理を切り替えれる。


...
private string firstName;
private string lastName;

public void ShowName(string firstName)
{
    this.firstName = firstName;
}

public void ShowName(String firstName, string lastName)
{
    this.firstName = firstName;
    this.lastName = lastName;
}
...

デストラクタ

確実な初期化を実現する機能がコンストラクタならば、確実な終了処理を実現するのがデストラクタ。全然見る機会がなかったと思ったら、今はガベージコレクションとやらが勝手に掃除してくれるみたいです。

this修飾子

そのクラスのインスタンス自身を指す。なのでstatic宣言してる場合は使えない、

static

staticをつけたものメソッドをクラスメソッド、普通のメソッドはインスタンスメソッドと言う。staticをつけるとすべてのインスタンスで共有される。 便利だけど使いすぎるとクラス間の依存が強くなって動作の追跡が難しくなる。 読み取り専用のときだけ使ったり、シングルトンで使ったほうがいいみたいです。

シングルトン

インスタンスを1個だけしか生成しないようにするデザインパターンのこと。


class MySingleton
    {
        //static(全インスタントの中で唯一1個)宣言のinstanceを作る
        private static MySingleton instance = new MySingleton();
        //クラスメイト同じメソッドなのでコンストラクタとして設定。ここでは変数を特に扱ってないので{}の中身は何も設定してない。
        private MySingleton() { }
        //どこからでも呼べるメinstanceメソッド
        public static MySingleton Instance
        {
            get
            {
                return instance;
            }
        }
        //他のクラスからでも呼ぶことができるけどシングルトンなので2個宣言したらエラーが出る、
    }

class CallMySingleton
{
    //ここで呼び出したインスタンスは両方とも同じものにアクセスしてるので
    //instance1 == instance2 はtrue
    MySingleton instance1 = MySingleton.Instance;
    MySingleton instance2 = MySingleton.Instance;
    //newで新しくインスタンスを作るとstatic宣言してるためエラーが出る。
    //なので複数個インスタンスを作れない
    //このデザインパターンのことをシングルトンというみたいです。
    MySingleton instance3 = new MySingleton();//ここでエラー
}

出力引数(outキーワード)

outキーワードを使うと複数の返り値を設定することができる。

EX)

class ReturnMultiKey
    {
        public void GetMaxMin(int x ,int y, out int max,out int min)
        {
            if (x >= y)
            {
                max = x;
                min = y;
            }
            else
            {
                max = y;
                min = x;
            }
        }
    }
//////////////
//呼び出し元

var a = new ReturnMultiKey();//インスタンス作成
int resultMax;
int resultMin;//outで帰ってくる返り値を受け取る変数を用意

a.GetMaxMin(10,3,out resultMax,out resultMin);
//引数は宣言したresultMax,resultMinと同じ名前
//これでメソッドで行った処理内容で値が帰ってくる

タプル型(tuple)

こっちのほうが簡単に複数の引数を持てるみたいです。どっかで使ってるのを見たけど忘れたので必要になったら調べる。

イテレーター

どこまで処理が走ったか覚えといてその都度その途中からの処理を返す。

public IEnumerable<string> GetStrings(){
    yield return "へっぽこ";//一回目に呼ばれたときはここ
    yield return "太郎";//二回目に呼ばれたときはここ
    yield return "マスター";//三回目に呼ばれたときはここの値が返る
}
//待つ処理でかなり使われてる気がする。

自動プロパティ

unintyLearn C# Propertiesでやってた内容の掘り下げ。

class Person{
    public string name {get;set;}
}

get;set;と書くだけで内部で値を保存するためのフィールドと値を出し入れするコードが自動的に作られる。 他のコードからインスタンス化して呼び出すとき

//他のクラス
var n = new Person{
    name = "へっぽこ"
};
//と書くだけでこのインスタンスのnameフィールドに値がセットされる。

See also