C# に関する本を読んでいるときに、@ を使用して "オーバーロード" したり、C# キーワードを識別子として使用したりするコードに出くわしました。あいまいさにつながるため、これは良い習慣ではないと思います。私はこれを考えるのが正しいですか、それともこれを使用する必要がある場合がありますか?
8 に答える
実際、ほとんどの場合、これを避ける価値があります。それが役立つかもしれない主な有効な時間は、たまたまC#キーワードであるクラス/ etcを持つ外部ライブラリ(別の言語からの)を扱うときですが、実際にこの問題が発生したことはありません。C# では、インターフェイスをオーバーライド/実装するときにメソッド引数名の名前を変更できるため、よくある一連のケースを回避できます。
もう 1 つの (おそらく怠惰な) 用途は、コード生成です。フィールド / 変数 / などの前に常に @theName を付ければ、特殊なケースについて心配する必要はありません。個人的には、C# キーワード/コンテキスト キーワードのリストと照合して、アンダースコアなどを追加するだけです。
@ 記号の他の用途 (逐語的な文字列リテラル) は、@"はるかに便利" です。
HtmlHelper を使用して css クラスを定義している asp.net MVC ビューで使用しました。
<%= Html.TextBox("Name", null, new { @class = "form-field" }) %>
他の人が指摘しているように、@-quoting は文字列で非常に便利です。ここではいくつかの例を示します。
// Not having to escape backslashes.
String a = @"C:\Windows\System32";
// Escaping quotes.
String b = @"The message is ""{0}"".";
// String with embedded newlines.
String c = @"An error occured.
Please try again later.
";
変数名としてキーワードを予約するのは悪い考えだと思います。私見では、コードが読みにくくなります。役に立つ場合もありますが。たとえば、ASP.NET MVC ビューでは、次のように記述できます。
<%= Html.TextBox("name", new { @class = "some_css_class" }) %>
次のように、文字列のみで使用されているだけで、使用されているのを見てきました。
string name=@"some funny name";
これについては知らなかったが、あなたの言うことから、私はそれを避けるだろう.
C# で @ を使用するのは、書式設定済みの文字列のみです。
@"String\no\need\to\escape\slashes"
混乱を招くものはすべて安全に回避できます。:-)
@ を使用する唯一の場所は文字列です。
MSDN より: @-quoting の利点は、エスケープ シーケンスが処理されないことです。これにより、完全修飾ファイル名などを簡単に記述できます。
@"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt"
読みやすさに役立つと思われる拡張メソッドを除いて、私はそれを避けます。
public static void Foo(this object @this)
{
Console.WriteLine(@this.ToString());
}