21

別の C# ソース ファイルから静的メソッドをインポートし、「ドット」なしで使用するにはどうすればよいですか?

お気に入り :

foo.cs

namespace foo
{
    public static class bar
    {
        public static void foobar()
        {
        }
    }
}

Program.cs

using foo.bar.foobar; <= can't!

namespace Program
{
    class Program
    {
        static void Main(string[] args)
        {
             foobar();
        }
    }
}

だけではできませんが、非常に冗長であるにもかかわらず、上foobar();に書いて動作するように呼び出すと。これに対する回避策はありますか?using foo;foobar()foo.bar.foobar()

4

4 に答える 4

43

C# 6.0 ではそれが可能です。

C# 6.0では静的インポートが可能です (静的メンバーの使用を参照)。

あなたはできるようになります:

using static foo.bar;

そして、あなたのMain方法で次のことができます:

static void Main(string[] args)
{
    foobar();
}

次のように同じことができますSystem.Console

using System;
using static System.Console;
namespace SomeTestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Test Message");
            WriteLine("Test Message with Class name");
        }
   }
}

編集: 2015 年 1 月の Visual Studio 2015 CTP のリリース以降、静的インポート機能には次のstaticようなキーワードの明示的な言及が必要です。

using static System.Console;
于 2014-10-24T14:35:40.363 に答える
8

これは受け入れられた回答ですが、以下の回答にあるように、これは C# 6 で可能になったことに注意してください。

できません

静的メソッドは、設計によりクラス内にある必要があります..

静的メソッドをクラスにラップする必要があるのはなぜですか?

于 2012-12-28T06:09:56.707 に答える
1

次のように適切なスコープでAction Delegate変数を宣言し、後で使用します。

Action foobar = () => foo.bar.foobar();

またはさらに簡単

Action foobar = foo.bar.foobar;

拡張メソッド (C# プログラミング ガイド)にも注目します。パラメータを持つメソッドがある場合、多くの場合、非常に便利です:

public static class bar
{
    public static void foobar(this string value)
    {
    }
}

そしてそれを利用します:

 string s = "some value";
 s.foobar();

これは実際にははるかに優れたアプローチです。

于 2012-12-28T06:09:43.900 に答える
0

ここですでに回答を追加するには、C# は非常に型指定された言語であることに注意することが重要です。したがって、現在のクラスにメソッドが存在しない限り、探しているようなことを行うことはできません。

ただし、以下を使用して追加すると:

using foo;

次に、次のようなタイプとメソッドだけでアクセスできます。

bar.foo();
于 2012-12-28T06:29:22.823 に答える