Using static, dyrektywa (C# odwołania)using static directive (C# Reference)

using static Dyrektywy wyznacza typ, którego statycznych elementów członkowskich i typy zagnieżdżone, możesz uzyskać dostęp bez określenia nazwy typu.The using static directive designates a type whose static members and nested types you can access without specifying a type name. Jego składnia jest następująca:Its syntax is:

using static <fully-qualified-type-name>;

gdzie w pełni kwalifikowana nazwa--typ jest nazwa typu, którego statycznych elementów członkowskich i typy zagnieżdżone może znajdować się bez określania nazwy typu.where fully-qualified-type-name is the name of the type whose static members and nested types can be referenced without specifying a type name. Jeśli nie podasz w pełni kwalifikowana nazwa typu (pełna nazwa przestrzeni nazw wraz z nazwą typu), C# generuje błąd kompilatora CS0246: "Nie można odnaleźć nazwy typu lub przestrzeni nazw"/ przestrzeń nazw typu"(Brak przy użyciu dyrektywy lub odwołania do zestawu?)".If you do not provide a fully qualified type name (the full namespace name along with the type name), C# generates compiler error CS0246: "The type or namespace name 'type/namespace' could not be found (are you missing a using directive or an assembly reference?)".

using static Dyrektywa odnosi się do dowolnego typu, który ma statyczne elementy członkowskie (lub zagnieżdżone typy), nawet wtedy, gdy w nim również elementy członkowskie wystąpień.The using static directive applies to any type that has static members (or nested types), even if it also has instance members. Jednak składowych wystąpienia może być wywoływany przez wystąpienie typu.However, instance members can only be invoked through the type instance.

using static Dyrektywa została wprowadzona w języku C# 6.The using static directive was introduced in C# 6.

UwagiRemarks

Zwykle po wywołaniu statycznego elementu członkowskiego, podaj nazwę typu, wraz z nazwą elementu członkowskiego.Ordinarily, when you call a static member, you provide the type name along with the member name. Wielokrotnego wprowadzania tej samej nazwie typu, aby wywołać elementy członkowskie tego typu może spowodować pełne zasłoniętej kodu.Repeatedly entering the same type name to invoke members of the type can result in verbose, obscure code. Na przykład poniższą definicję Circle klasy odwołuje się do liczby elementów członkowskich Math klasy.For example, the following definition of a Circle class references a number of members of the Math class.

using System;

public class Circle
{
   public Circle(double radius)
   {
      Radius = radius;
   }

   public double Radius { get; set; }

   public double Diameter
   {
      get { return 2 * Radius; }
   }

   public double Circumference
   {
      get { return 2 * Radius * Math.PI; }      
   }

   public double Area
   {
      get { return Math.PI * Math.Pow(Radius, 2); }
   }
}

Dzięki wyeliminowaniu konieczności, aby jawnie odwołać Math klasy zawsze odwołuje się do elementu członkowskiego, using static — dyrektywa generuje znacznie bardziej przejrzysty kod:By eliminating the need to explicitly reference the Math class each time a member is referenced, the using static directive produces much cleaner code:

using System;
using static System.Math;

public class Circle
{
   public Circle(double radius)
   {
      Radius = radius;
   }

   public double Radius { get; set; }

   public double Diameter
   {
      get { return 2 * Radius; }
   }

   public double Circumference
   {
      get { return 2 * Radius * PI; }      
   }

   public double Area
   {
      get { return PI * Pow(Radius, 2); }
   }
}

using static Importuje tylko dostępne statyczne elementy członkowskie i zagnieżdżone typy zadeklarowane w określonym typie.using static imports only accessible static members and nested types declared in the specified type. Dziedziczone elementy członkowskie nie są importowane.Inherited members are not imported. Można importować z dowolnego typu o nazwie z za pomocą dyrektywy statyczne, w tym moduły języka Visual Basic.You can import from any named type with a using static directive, including Visual Basic modules. Jeśli F# funkcji najwyższego poziomu są wyświetlane w metadanych jako statyczne elementy członkowskie typu nazwanego, którego nazwa jest prawidłowym C# identyfikator, a następnie F# funkcje mogą być importowane.If F# top-level functions appear in metadata as static members of a named type whose name is a valid C# identifier, then the F# functions can be imported.

using static sprawia, że metody rozszerzenia zadeklarowana w określonego typu dostępne do przeszukiwania metody rozszerzenia.using static makes extension methods declared in the specified type available for extension method lookup. Nazwy metody rozszerzenia nie są importowane w zakresie niekwalifikowanej odwołania w kodzie.However, the names of the extension methods are not imported into scope for unqualified reference in code.

Metody o tej samej nazwie, zaimportowane z różnych typów przez różne using static dyrektywy w tej samej jednostce kompilacyjnej lub nazw tworzą grupy metod.Methods with the same name imported from different types by different using static directives in the same compilation unit or namespace form a method group. Rozpoznanie przeciążenia w tych grupach metoda regułom normalnego języka C#.Overload resolution within these method groups follows normal C# rules.

PrzykładExample

W poniższym przykładzie użyto using static dyrektywy, aby statyczne elementy członkowskie Console, Math, i String klasy dostępne bez konieczności określania nazwy typu.The following example uses the using static directive to make the static members of the Console, Math, and String classes available without having to specify their type name.

using System;
using static System.Console;
using static System.Math;
using static System.String;

class Program
{
   static void Main()
   {
      Write("Enter a circle's radius: ");
      var input = ReadLine();
      if (!IsNullOrEmpty(input) && double.TryParse(input, out var radius)) {
         var c = new Circle(radius);
         
         string s = "\nInformation about the circle:\n";
         s = s + Format("   Radius: {0:N2}\n", c.Radius);
         s = s + Format("   Diameter: {0:N2}\n", c.Diameter);
         s = s + Format("   Circumference: {0:N2}\n", c.Circumference);
         s = s + Format("   Area: {0:N2}\n", c.Area);
         WriteLine(s);
      }
      else {
         WriteLine("Invalid input...");
      }
   }
}

public class Circle
{
   public Circle(double radius)
   {
      Radius = radius;
   }

   public double Radius { get; set; }

   public double Diameter
   {
      get { return 2 * Radius; }
   }

   public double Circumference
   {
      get { return 2 * Radius * PI; }      
   }

   public double Area
   {
      get { return PI * Pow(Radius, 2); }
   }
}
// The example displays the following output:
//       Enter a circle's radius: 12.45
//       
//       Information about the circle:
//          Radius: 12.45
//          Diameter: 24.90
//          Circumference: 78.23
//          Area: 486.95

W tym przykładzie using static dyrektywy może również zostały zastosowane do Double typu.In the example, the using static directive could also have been applied to the Double type. To spowoduje umożliwiły wywołać TryParse(String, Double) metody bez określania nazwy typu.This would have made it possible to call the TryParse(String, Double) method without specifying a type name. Jednak powoduje to utworzenie mniej czytelny kod, ponieważ staje się to konieczne sprawdzić using static instrukcje, aby ustalić, jakiego typu liczbowego TryParse metoda jest wywoływana.However, this creates less readable code, since it becomes necessary to check the using static statements to determine which numeric type's TryParse method is called.

Zobacz takżeSee also