ネコのために鐘は鳴る

寺院に住み着くパソコ〇好き

2021-01-01から1年間の記事一覧

(C#) メモリ確保ベンチマーク on .NET6

この記事は .NET6 Advent Calendar 2021 の14日目の記事です。 .NET6 におけるバッファメモリ確保 以前 .NET Framework4.8 でメモリ確保の方法についてベンチマークを取り、記事にしたことがあります。 (参考 (C#) メモリ確保ベンチマーク 6種盛り) .NET6 で…

(C#) async/await を理解する

この記事は Qiita C# Advent Calendar 2021 の5日目の記事です。 はじめに C# で async/await が登場してからずいぶんと時間がたち、モダンな C# においてはほぼ必須となりました。Unity でも UniTask などのライブラリもあり、簡単に非同期処理が書けます。…

(C#) C#10 で構造体の既定のコンストラクタを禁止する

構造体の既定のコンストラクタ 構造体 (struct) には既定のコンストラクタが暗黙的に定義されます。 public struct MyStruct { public string? Value { get; } public MyStruct(string? value) { Value = value; } } // 既定のコンストラクタ var myStruct =…

(C#) 構造体で列挙型ライクな定義を作る

小ネタです。毎回 C# のあまり一般的ではない珍妙な実装の記事ばかり書いていますが、今回もまた珍妙な実装です。実用性は一応ありますが、一般的ではない珍妙な方法だと理解した上でご利用ください。 概要 構造体をつかって列挙型のような型を作っていきま…

(C#) lock フリーで高速なスレッドセーフ操作

C# で排他制御をしたい場合いくつか方法があります。何も考えずに雑にlock構文を書くだけで同期は取れるのですが、より高度にパフォーマンスチューニングしたい場合のため、効率的な方法を紹介します。 例えば以下のようなものがあるとします。 // スレッド…

(C#) 小ネタ $ 文字列中の三項演算子

小ネタです。 はてなブログの C# の linter が古いのか、シンタックスハイライトがめちゃくちゃになってますが気にしないでください。 string Foo(int? num) { // これはコンパイルエラー return $"The num is {num == null ? "NULL" : num.Value.ToString()…

(C#) interface/core パターンによるポリモーフィズム

継承の濫用による設計の矛盾 コード共通化のためだけの継承の濫用が設計の矛盾を生むというのを分かっている方は、下の問題設定だけ見て、次の項まで読み飛ばしてください。 問題設定 人間・犬・猫には「歩く」という共通の振る舞いがあり、現在の「位置」を…

(C#) Source Generator で typeof の型名を取得する

C# 9.0 から使える Source Generator、良いですね。アプリケーションを作る側の人が Source Generator を作ることは少ないと思いますが、ライブラリを作る側の人には便利ですよね。 基本的な使い方・作り方はここでは解説しません。公式の説明や公式サンプル…

(C#) 型の外部から疑似的に interface を追加する

interface を後付けしたい interface は C# でポリモーフィズムを実現するために、メソッド・プロパティの宣言だけを決めておき、実際の挙動は型の実装者に任せるというものです。今更説明するまでもないですね、普段みなさんが使ってるやつです。 普通は型…