c#内でクラスを宣言せずに、名前空間内にある関数を呼び出す方法はありますか?
たとえば、まったく同じで、すべての C# プロジェクトで使用する必要がある 2 つのメソッドがある場合、それらの関数を取得して dll にし、「Using myTwoMethods」と言って開始する方法はありますか?クラスを宣言せずにメソッドを使用していますか?
今、私はそうしています: MyClass.MyMethod();
やりたいこと: MyMethod();
ありがとう、ロヒット
c#内でクラスを宣言せずに、名前空間内にある関数を呼び出す方法はありますか?
たとえば、まったく同じで、すべての C# プロジェクトで使用する必要がある 2 つのメソッドがある場合、それらの関数を取得して dll にし、「Using myTwoMethods」と言って開始する方法はありますか?クラスを宣言せずにメソッドを使用していますか?
今、私はそうしています: MyClass.MyMethod();
やりたいこと: MyMethod();
ありがとう、ロヒット
2015 年の更新: いいえ、C# で「フリー関数」を作成することはできませんが、C# 6 以降では、クラス名を指定せずに静的関数を呼び出すことができます。C# 6 には、次の構文を使用できる "using static" 機能があります。
static class MyClass {
public static void MyMethod();
}
SomeOtherFile.cs:
using static MyClass;
void SomeMethod() {
MyMethod();
}
クラス外でメソッドを宣言することはできませんが、クラス ライブラリ プロジェクトの静的ヘルパー クラスを使用してこれを行うことができます。
public static class HelperClass
{
public static void HelperMethod() {
// ...
}
}
使用法 (クラス ライブラリへの参照を追加した後)。
HelperClass.HelperMethod();
拡張メソッドを使用するという提案に続いて、メソッドを System.Object の拡張メソッドにすることができ、そこからすべてのクラスが派生します。私はこれを支持しませんが、あなたの質問に関しては、これが答えになるかもしれません。
namespace SomeNamespace
{
public static class Extensions
{
public static void MyMethod(this System.Object o)
{
// Do something here.
}
}
}
静的メソッドを使用していない限り、MyMethod();
がある場所ならどこでも同じようにコードを記述できるようになりました (その場合は を実行する必要があります)。using SomeNamespace;
Extensions.MyMethod(null)
話しているメソッドのタイプに応じて、拡張メソッドを調べることができます。
http://msdn.microsoft.com/en-us/library/bb383977.aspx
これにより、既存のオブジェクトに機能を簡単に追加できます。