[解決済み] C#の拡張メソッドによる演算子のオーバーロード
質問
拡張メソッドを使用して、オペレーティング・オーバーロードを C# の
StringBuilder
クラスがあります。 具体的には、与えられた
StringBuilder
sb
ということで、私は
sb += "text"
と同等になるように
sb.Append("text")
.
の拡張メソッドを作成する構文を以下に示します。
StringBuilder
:
public static class sbExtensions
{
public static StringBuilder blah(this StringBuilder sb)
{
return sb;
}
}
これは、正常に
blah
拡張メソッドを
StringBuilder
.
残念ながら、演算子のオーバーロードは機能しないようです。
public static class sbExtensions
{
public static StringBuilder operator +(this StringBuilder sb, string s)
{
return sb.Append(s);
}
}
その他の問題点として、キーワード
this
はこの文脈では使用できません。
拡張メソッドで演算子のオーバーロードを追加することは可能ですか? もし可能であれば、どのような方法が適切ですか?
どのように解決するのですか?
拡張メソッドは静的クラスでなければならず、静的クラスは演算子のオーバーロードを持つことができないため、現在のところこれは不可能です。しかし の機能が検討されています。 一部 C# の将来のリリース . Madsは、その実装についてもう少し話してくれました。 2017年のこの動画で .
現在実装されていない理由について、C#言語PMのMads Torgersen氏は次のように語っています。
...Orcasのリリースでは、我々は以下のことを決定しました。 を追加する慎重なアプローチをとります。 通常の拡張メソッドのみ ということです。 イベント、演算子、静的メソッド、などなど などです。通常の拡張メソッドは LINQに必要なものであり、かつ 構文的に最小限のデザインで には簡単に真似できないものがあります。 を、他のメンバー種別の
を意識するようになってきています。 他の種類の拡張メンバがあること は有用である可能性があるので、また戻ってくる予定です。 は、Orcasの後にこの問題に取り組みます。しかし 保証はないけどね。
同記事のさらに下。
申し訳ございませんが 次のリリースでは、このようなことを行う予定です。私たちは エクステンションメンバーは というのも、私たちの計画では を実現するために多くの労力を費やしました。 しかし、結局のところ、そのようなことはできませんでした。 ということになりました。 他の面白い機能へ
これはまだ将来のためのレーダーである。 をリリースしました。そのために必要なのは 説得力のあるシナリオを大量に 正しい設計のための一助となるものです。
関連
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】WSACancelBlockingCallの例外について
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み] Distinct() with lambda?
-
[解決済み] 既存の静的クラスに拡張メソッドを追加することはできますか?
-
[解決済み] なぜJavaには演算子のオーバーローディングがないのですか?
-
[解決済み】C#には拡張プロパティがある?
-
[解決済み] 拡張メソッドはインターフェースに適用できますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。