Effective C# 3rd 読書メモ 11 .NETのリソース管理を理解する

.NETにおいては、実行環境(CLR: Common Language Runtime)のメモリ管理とGCを理解することが重要である。 C++とC#の大きな違いの一つは、ファイナライザの挙動の違いである。 C++とは異な …

Effective C# 3rd 読書メモ 10 new修飾子はベースクラスが変更された場合にのみ使用する

new修飾子 new修飾子を使うと、ベースクラスから継承したvirtualでないメソッドを再定義できる。 (new修飾子を使わなくても隠蔽はできるが、コンパイル時に警告が出る) しかし、継承関係にあるクラスのもつ同名のメ …

Effective C# 3rd 読書メモ 09 ボックス化とボックス化解除を最小限にする

値型と参照型の間の暗黙的な型変換(ボックス化、ボックス化解除)にはパフォーマンス上の影響がある。 ボックス化とボックス化解除はできるだけ避けるべき。 たとえば、以下のコードではボックス化が発生する。 int first …

Effective C# 3rd 読書メモ 08 イベント呼び出しにはnull条件演算子を使用する

C# 6.0で導入されたnull条件演算子を使うと、イベント呼び出し時のnullチェックを簡潔に書くことができる。 以下のコードは、イベントハンドラの呼び出しを行う際の古典的なイディオムである。 public class …

Effective C# 3rd 読書メモ 07 コールバックはデリゲートによって実装する

メソッドの挙動を呼び出し側でカスタマイズしたい場合には、デリゲートを使用してコールバックを実装する。 LINQでデリゲートを使う例: var numbers = Enumerable.Range(1, 200).ToLi …