web-dev-qa-db-ja.com

C#での静的インポート

C#にはJavaの静的インポートのような機能がありますか?

のようなコードを書く代わりに

FileHelper.ExtractSimpleFileName(file)

私は書くことができました

ExtractSimpleFileName(file)

コンパイラは、FileHelperからのメソッドを意味していることを知っています。

52
IAdapter

C#6.0以降では、次のことが可能です。

using static FileHelper;

// in a member
ExtractSimpleFileName(file)

ただし、C#の以前のバージョンには静的インポートがありません。

タイプのエイリアスを使用して、親密にすることができます。

using FH = namespace.FileHelper;

// in a member
FH.ExtractSimpleFileName(file)

または、静的メソッドをタイプの 拡張メソッド に変更します。これで、次のように呼び出すことができます。

var value = file.ExtractSimpleFileName();
81
Oded

いいえ、そのような機能はC#には存在しません。同じクラスのメソッド内に既にいる場合を除き、静的メソッドが属するクラスを指定する必要があります。

C#では 拡張メソッド がありますが、これはどの種類の模倣です。

12
Darin Dimitrov

時間の経過...次のバージョンではC#が静的インポートされる可能性があるようです。プレビューについては http://msdn.Microsoft.com/en-us/magazine/dn683793.aspx を参照してください。

using System;
using System.Console; // using the Console class here

public class Program
{
    public static void Main()
    {
        // Console.WriteLine is called here
        WriteLine("Hello world!");
    }
}

'-Roslyn' C#コンパイラの 公式ドキュメント は、機能を「完了」として示しています。

RoslynプラットフォームでのC#6.0 静的インポートをサポート 。次のようなステートメントが必要です。

using static System.Console;

したがって、コードは次のようになります。

using static System.Console;
namespace TestApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine("My test message");
        }
    }
}

C#6.0の以前の計画バージョンには、静的インポートなしstaticキーワードがありました。

C#6.0の他の新機能については、次を参照してください。 C#6の新しい言語機能

5
Habib