C#の勉強記録

C#のエンジニア(笑)として勤務して一年が経ったが

業務でまともなコードは書いたことがないといっていい。

殆どがバッチ処理程度だけど.NET使ったほうが幾分楽に欠けるからC#を使っているだけのプログラムだから。

回ってくる案件は全然おもんないけど、お客さんの案件だから文句は言わずやってきたが、先日上司から直々に「お前がやってきた案件なんてクソだ(原文ママ)」と言われてしまった。爆笑である。

というわけで本格的にC#の勉強をしてクソじゃない案件を取りにいけるように頑張ろうと思う。つまり転職準備だ。

 

コンストラクタについて

インスタンスを作るときに必ず呼ばれる//後日修正:メソッド。//<-メソッドと書き方が違う!具体的に言うとコンストラクタには「戻り値」って概念が無いので定義するときの文法が違う。
クラスを定義したとき、そのクラス内に//後日修正:クラスと同名でのメソッドを作ればよい。//『クラスと同名で』(ここ重要)コンストラクタを定義する。
ここでフィールドとかを定義する処理を書けばインスタンス生成時に自動的に値がセットされる。

class User{
    public string name = "me";
    public User() {
        this.name = "ME";
    }
}

ここで書いた「this」とは生成したインスタンスのことを指す。
生成したインスタンスごとに値をいじれる。

 

クラスの継承について

クラスは別クラスの内容を引き継いで作ることができる
親クラスで定義したフィールドやメソッドは子クラスにも実装される。
例えば

class User{
    public string name;
    public User(string name)
        {
        this.name = name;
        }
}

class AdminUser : User
{
        public AdminUser(string name) : base(name) { }
}

この「:User」によってAdminUserにnameとUserメソッド(コンストラクタ)が継承された。
また、この場合親クラスでコンストラクタを定義しているので、継承をする以上は子クラス側も親クラスと同様にコンストラクタを定義する必要がある。「:base(name)」と書くことで継承元のコンストラクタを明示的に継承することが必要。
子クラスでコンストラクタが必要ないというときにはそもそも継承する必要がない。

また、これとは別に親クラスで定義したメソッドと同じメソッドを定義すると、子クラスから生成したインスタンスではそちらが使用される。

まだまだ進んだけど一旦ここまでが復習。