C#で気になった機能

++静的クラス

インスタンス化が出来ない

・コンストラクタがもてない

・継承出来ないし、継承されることも出来ない(シールされている)

静的クラスと静的クラス メンバー (C# プログラミング ガイド) | Microsoft Docs

 

++静的メソッド

Rubyでいうクラスメソッドとほぼ同様の模様。

staticなメンバ変数以外にはアクセス出来ず、Class.StaticMethod()のようにクラスオブジェクトからコール出来る。=>インスタンス化せずともコール出来る。

static メソッドとinstanceメソッド

 

++タプル

複数の数値をまとめる。

複数の値を返すためのものと最初は思ったが、それは使い方の一例。

 

++匿名型

これ読む限り、メソッドを削ぎ落として動的型付けにしたハッシュというイメージ。

匿名型 (C# プログラミング ガイド) | Microsoft Docs

 

++dynamic

C#は静的型付けだがなんと動的型付けが可能とのこと。

基底クラスであるobject型との違いはobject型の変数にインスタンスを入れるとobjectクラスに定義されてるメソッドしか使えないのに対して、dynamicは入れたインスタンスのメソッドを使うことが出来る。

dynamic - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

 

++@-逐次的識別子

thisなどの予約文字に対して@をつけることで、その名前の変数を使えるようにするものとのこと。混乱の原因になるだけでは?

 

++var-型推論

varを付けて変数を宣言することで型推論をしてくれる。

初期値が必要

 

++delegate

C言語で言うところの関数ポインタに近く、指定した型の返り値と引数を持つメソッドを代入出来る。複数の処理を代入することも出来る。インスタンスメソッドの代入も可能。

 依存性の注入をメソッドのみで行うものという印象。

 インターフェースを使うと継承が必要だったり、メソッド名を固定されるのに対してdelegateなら処理内容のみを渡すのでこの縛りはない。

 イベントハンドラで最も使用するらしく、配列のように複数の処理を代入出来るので、特定の処理を溜めるのに使用出来る。dynamicを使えば、引数、返り値の制約も消せる。

デリゲート - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

イベント - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

 

++拡張メソッド

究極的には"staticなクラスのメソッドをインスタンスメソッドっぽく呼べるようにしたもの"

Rubyのmoduleのようにmix-inするわけではないので、privateメソッドやprotectedメソッドを拡張メソッド内で呼ぶことは出来ない。

c# - C#にRubyにおけるmoduleに相当する機能はありますか? - スタック・オーバーフロー

拡張メソッド - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

 

++参照引数

参照渡しを行うときは、明示的にrefと書く必要がある。

参照渡し - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

 

++入力参照引数 (in 引数)

inを付けることでで読み取り専用の参照引数となる。

値渡しとの違いは書き換え時にエラーが起きるのと、メモリを節約出来ることか。

 

++internal

アクセス修飾子。アクセスをアセンブリに限定する。

アセンブリとは実行ファイル、DLLのこと。

>アセンブリをグローバル アセンブリ キャッシュに配置すると、複数のアプリケーションで共有できます。

らしいので、他のアプリに参照されないための機能と思っておけばいいっぽい。

アセンブリとグローバル アセンブリ キャッシュ (C# および Visual Basic)