C#研修のメモ
文法
クラス内value という変数は予約語
Propertyをセットしたときに自動的に利用される
下記の例では
hoge.Channel = 5
class生成
デフォルトコンストラクタなしでも生成時に引数に値を与えらえる
多重継承できない
基底クラスは多重継承できない
interfaceは多重継承できる
共有メンバ
静的メンバと同様。
staticをつけたもの。
constをつけても共有メンバとなる。
class自体にstaticがつくと、メソッドがすべてstaticである必要がある。
is演算子
2項演算子で2つの型に互換性があるかどうかを判定する
クラスが同じかサブクラスだと制となる
typeof演算子
型そのものを変数にするのに利用する
delegate
プロトタイプ宣言をdelegate
C#ではdelegateという文法を導入して、シグナチャの一致しない関数が代入された場合にはコンパイルエラーする仕組みがある
delegat void MyDelegate(sting ss);
MyDelegate myfunc;
上記にて戻り値はvoid、引数はstring1つという情報である。
MyDelegateという型の定義となる
引数、戻り値をチェックする仕組みはdelegateである。
delegateと考えず、戻り値が何で引数が何か、と考えると理解しやすい。
拡張メソッド
public static string ToZenkaku(this string str)
Stringクラスに対してメソッドを追加したいので、ToZenkakuとなる
ラムダ式
型推論してくれるから型を書く必要がない
ラムダ式は明示的にreturnしなくても式単体であれば計算結果を戻してくれる
これを渡すことによって、外部から処理をカスタマイズできる
研修資料のP.106が分かりやすい
BeginInvokeの引数はDelegateである。
そこで、ラムダ式Actionを渡すことで、BeginInvokeの処理を制御できる。
##Merit
- 思考が中断されない
- ラムダ式の外部で宣言した変数をラムダ式内で参照できる
LINQ
IEnumerableというインタフェースに対する操作を提供するもの
(IListSource)
LINQを使えば簡単に走査処理が記述できる
Select句
複数プロパティを保持するデータをLINQで戻すとき、匿名クラスが生成され、
varを利用したコードしかかけなくなる。
しかし、プロパティへの参照とは問題なく行うことができる。
varが利用できるのはローカル変数のみ
##merit
-無駄なqueryをしない 研修資料p.55
-型推論してくれるから、簡単にオブジェクトの集まりを作成できる
#非同期処理
Assync Completed
Assyncがついているメソッドは、それが終わったらCompletedがついている関数が
呼ばれる
- Assyncメソッドが用意されているオブジェクトは、それをそのまま使う
- 用意されていない場合は、BackGroundWorkerの仕組みを利用する
RunworkerAssyncをcallすると、DoWorkが呼び出される
Threadクラスのコンストラクタを確認するとThreadStartデリゲートが必要とある。
この時点で構えてしまうが、ThreadStartデリゲートのHelpを確認するとvoid voidの deletegaと記載されている。
# まとめ
- 今までC++位しかまともに実装したことがなかったが、C#の文法の拡張性や、インテリセンスの賢さにくらくらした。
- 研修の内容をまとめるの難しい。こういった形で残すことを意識して物事に取り組むとアウトプット変わってきそう。