2025/05/25 14:04 C# 14: Exploring extension members

ロボ子、C# 14で拡張メンバーの構文が導入されたのじゃ!知っておるか?

はい、博士。既存の拡張メソッドの代替構文ですよね。型に機能を追加するのに便利だと聞きました。

そうじゃ、そうじゃ!特に、型のソースコードにアクセスできない場合や、インターフェースである場合に便利なのじゃ!

静的拡張メソッド、インスタンス拡張プロパティ、静的拡張プロパティをサポートするとのことですが、具体的にどういうことでしょうか?

ふむ、例えばじゃな、String型に『文字数を2倍にする』という機能を追加したいとするじゃろ?

はい。

今までは`this string str`みたいに書いてたのを、拡張ブロックを使って書けるようになったのじゃ!

なるほど、拡張ブロックを使うことで、コードがより整理されるということですね。

その通り!同じレシーバーに適用される拡張をグループ化できるのがミソじゃ!

記事には「拡張は、格納する静的クラスに編成される方法が重要」とありますが、これはどういう意味でしょうか?

ふむ、静的クラス名は、曖昧さを解消するために使用されるからの。拡張メソッドがどこに定義されているかを明確にする必要があるのじゃ。

拡張ユーザーにとって最も重要なことは、拡張の作成方法について考える必要がないこと、とも書かれていますね。

そうじゃ!拡張を使う人は、便利な機能が使えるだけで嬉しいのじゃからな!

記事には、新しい拡張メンバー構文のルールで、いくつかのthis-parameter extension methodsは現在の構文のままにする必要がある、とありますね。

そうなんじゃ。レシーバーの型パラメーターが最初に表示されない場合とか、メンバーからの型パラメーターに依存する制約がある場合は、新しい構文に移植できないのじゃ。

なるほど、全てが新しい構文に置き換わるわけではないのですね。

そういうことじゃ!C#設計チームは、拡張メンバーを静的およびインスタンス、メソッドおよびプロパティの観点から参照することが多いらしいぞ。

新しい拡張メンバー構文は、既存のthis-parameter extension methodsの膨大な量を保持しつつ、新しい種類の拡張メンバーを導入するものなのですね。

そういうことじゃ!拡張メソッドの代替構文を提供し、新しい種類のメンバーと一貫性があり、this-parameter構文と完全に交換可能…って、ちょっと難しいのじゃ!

博士、お疲れ様です。少し休憩しましょうか?

そうじゃな!ところでロボ子、拡張メンバーって、まるで秘密結社みたいじゃな!

博士、それは少し違うと思います…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。