ブログ 2016/12/12 小ネタ 隠し演算子(?) C#には隠しキーワードとして__makerefなどの見慣れないキーワードがあるという話はたまに話題に出てきますが、実は隠し演算子もあります。 演算子 同じ結果の式 意味合い -~x x + 1 xに向かって値が入っているイメージ ~-x x - 1 xから値が出ていくイメージ 副作用を起こさない(非変)インクリメント、デクリメント(non-modified increment/decrement)です。 実際… 続きを読む 2016/12/11 小ネタ 隠しメンバー 今日は、C# 上からは見えない隠しメンバーが作られるという話。 「覚えがないのになぜか『すでに定義があります』っていう名前被りのコンパイル エラーが出た」なんてこともあり得ます。 C# は .NET 向け言語の代表的な位置づけの言語ではありますが、だからと言って、C# の機能と .NET IL (中間言語)の機能は同じではありません。 C# コンパイラーによって、ILのレベルでは結構身に覚えのないメンバーが追加されます。 例えば以下のようなコードを書くだけで、自動的に追加されたメンバーが… 続きを読む 2016/12/10 小ネタ フォーマット文字識別子 いい加減、小ネタらしい小ネタを書かないとタイトル詐欺臭いのでほんとに小ネタを。 C#では、以下のようなコードが書けたりします。変数abを用意して、a\u200dbって変数に書き込むと、abの値が変わるという。 要するに、この2つは識別子としては同一扱いされます。 using System; class Program { static void Main() { var ab = 0; a\u200db = 1; // ab と同じ扱い。\u20… 続きを読む 2016/12/09 小ネタ 同期コンテキストを拾わないTask型 今日も小ネタというかC# 7ネタというか、C# 7に合わせて1個ライブラリ書いたというか。 勢いで、こんなライブラリ1個作ってしまいました。 C# 7向けです(半分くらいはC# 5.0でも使えるものですが)。 ContextFreeTask ということで、C# 7の機能の1つについて説明。 C# 7で以下のような機能が入ります。 非同期メソッドの戻り値に任意の型を使えるように ほぼ、ValueTaskのために入った機能なんですが、まあ、せっかくなので他でも使ってみよ… 続きを読む 2016/12/08 小ネタ チェック例外とUnion型 今日の話は、C# 7で入る型スイッチや、さらにその先で予定されている、パターン マッチングや、代数的データ型(特にUnion型)というもので、例外処理の仕方が変わるかも、という話です。 例外 例外にはいくつかの性質があります。 まず、挙動としては、以下の2点が特徴的でしょう。 ロング ジャンプ: 複数のメソッドをまたいで、遠く離れた場所に移動する 型スイッチ: 例外の型を見て分岐処理を行う 例外に含められる情報としては、以下の2つが特に有用でしょう。 メッセージ(M… 続きを読む 新しい投稿へ 過去の投稿へ
2016/12/12 小ネタ 隠し演算子(?) C#には隠しキーワードとして__makerefなどの見慣れないキーワードがあるという話はたまに話題に出てきますが、実は隠し演算子もあります。 演算子 同じ結果の式 意味合い -~x x + 1 xに向かって値が入っているイメージ ~-x x - 1 xから値が出ていくイメージ 副作用を起こさない(非変)インクリメント、デクリメント(non-modified increment/decrement)です。 実際… 続きを読む
2016/12/11 小ネタ 隠しメンバー 今日は、C# 上からは見えない隠しメンバーが作られるという話。 「覚えがないのになぜか『すでに定義があります』っていう名前被りのコンパイル エラーが出た」なんてこともあり得ます。 C# は .NET 向け言語の代表的な位置づけの言語ではありますが、だからと言って、C# の機能と .NET IL (中間言語)の機能は同じではありません。 C# コンパイラーによって、ILのレベルでは結構身に覚えのないメンバーが追加されます。 例えば以下のようなコードを書くだけで、自動的に追加されたメンバーが… 続きを読む
2016/12/10 小ネタ フォーマット文字識別子 いい加減、小ネタらしい小ネタを書かないとタイトル詐欺臭いのでほんとに小ネタを。 C#では、以下のようなコードが書けたりします。変数abを用意して、a\u200dbって変数に書き込むと、abの値が変わるという。 要するに、この2つは識別子としては同一扱いされます。 using System; class Program { static void Main() { var ab = 0; a\u200db = 1; // ab と同じ扱い。\u20… 続きを読む
2016/12/09 小ネタ 同期コンテキストを拾わないTask型 今日も小ネタというかC# 7ネタというか、C# 7に合わせて1個ライブラリ書いたというか。 勢いで、こんなライブラリ1個作ってしまいました。 C# 7向けです(半分くらいはC# 5.0でも使えるものですが)。 ContextFreeTask ということで、C# 7の機能の1つについて説明。 C# 7で以下のような機能が入ります。 非同期メソッドの戻り値に任意の型を使えるように ほぼ、ValueTaskのために入った機能なんですが、まあ、せっかくなので他でも使ってみよ… 続きを読む
2016/12/08 小ネタ チェック例外とUnion型 今日の話は、C# 7で入る型スイッチや、さらにその先で予定されている、パターン マッチングや、代数的データ型(特にUnion型)というもので、例外処理の仕方が変わるかも、という話です。 例外 例外にはいくつかの性質があります。 まず、挙動としては、以下の2点が特徴的でしょう。 ロング ジャンプ: 複数のメソッドをまたいで、遠く離れた場所に移動する 型スイッチ: 例外の型を見て分岐処理を行う 例外に含められる情報としては、以下の2つが特に有用でしょう。 メッセージ(M… 続きを読む