3

重複の可能性:
C# が C++ のような非メンバー関数を許可しない理由

書く代わりに、StaticClass.Function()単純に書きたいと思いますFunction()。多くの関数があり、すべてが異なる (そして無関係な) クラスとファイルからアクセスできる必要があります。これらの関数を特定の名前空間に配置するにはどうすればよいですか? そこに宣言するだけでコンパイルエラーになります

error CS1518: Expected class, delegate, enum, interface, or struct

他の .NET 言語でもできることは知っています。使用できるコンパイルオプションはありますか? おそらく文書化されていませんか?

4

3 に答える 3

10

C# では無料の関数を使用できません。各関数は型に存在する必要があります。これはあくまで仕組みであり、技術的な可能性の問題ではなく、設計上の決定です。

この記事に興味があるかもしれません。


余談ですが、Intellisenseが C# よりも C++ よりもはるかに優れていることに気づいたことはありませんか? これは、役立つものの 1 つです (唯一のものではなく、1 つです)。

編集:おかしい、リンクされた記事を読んで、これはだましだと気づきました...

于 2012-08-09T23:25:55.937 に答える
2

C# では、設計上、これが許可されていません。

ただし、タイピングを減らすことが目的の場合は、いくつかのオプションがあります。

まず、using ディレクティブを使用してこれを簡素化できます。これを追加することにより:

using SC = YourNamespace.StaticClass;

その特定のドキュメント内の呼び出しを次のように短縮できます。

SC.Function();

場合によっては適切な別のオプションは、 拡張メソッドを使用することです。これにより、関数が最初の引数のメンバー関数のように見えるため、型を指定する必要がなくなります。もちろん、これは提供された例では機能しませんが (パラメーターが必要なため)、特定のユース ケースによっては、入力と検索の量を減らすための別のオプションになる可能性があります。

于 2012-08-09T23:31:43.597 に答える
-2

C# は純粋にオブジェクト指向であるため、クラス外で関数や宣言を行うことはできません。必要なものを実現するには、 static を使用する必要があります。

于 2012-08-09T23:27:38.953 に答える