C#
テスト等で、Privateなコンストラクタしか持たないクラスを生成したくなることがある。 コンストラクタが引数を取らない場合、Activatorを利用すれば簡単にできる。 class Test { private Test() { } } var obj = (Test)Activator.CreateInstance(typeof(Tes…
拡張メソッドを利用してインタフェースに実装をもたせる場合、インタフェースが公開しているもの以外の状態は利用できない。 が、ConditionalWeakTableを利用することでそれに近いことが実現できる。 class Parameter { public string str { get; set; } } i…
.Net FrameworkのBinaryWriter/Readerはビッグエンディアンに対応していない。 ので、ビッグエンディアンを扱う場合はこんな感じで書いていた。 static void Main(string[] args) { using (var stream = new MemoryStream()) using (var writer = new Binary…
これまで、複数のアセンブリをまとめる場合MicrosoftのILMergeを利用していた。 https://www.microsoft.com/en-us/download/details.aspx?id=17630 ILMergeはコマンドラインツールなので、プロジェクトのビルド後のイベントに実行コマンドを記述して利用して…
独自のスレッドでasync/awaitしたかったので、SynchronizationContextを実装する。 class SingleThreadSynchronizationContext : SynchronizationContext { BlockingCollection<Action> queue = new BlockingCollection<Action>(); Thread thread; public SingleThreadSynchr</action></action>…
.Net Frameworkのコンソールアプリケーションでは、Console.CancelKeyPressイベントにハンドラを登録することでCtrl+Cが押された時の動作をハンドルできる。 そのままプログラムを終了させたくない場合はConsoleCancelEventArgs.Cancelにtrueを設定する。 Co…