Як я можу використовувати функцію "Використання статики" C # 6?


123

Я переглядаю пару нових функцій у C # 6, зокрема, "використовуючи статику" .

використання static - це новий вид використання пункту, який дозволяє імпортувати статичні елементи типів безпосередньо в область застосування.
(Знизу повідомлення в блозі)

Ідея полягає в наступному, відповідно до кількох підручників, які я знайшов,
а не:

using System;

class Program 
{ 
    static void Main() 
    { 
        Console.WriteLine("Hello world!"); 
        Console.WriteLine("Another message"); 
    } 
}

Ви можете опустити повторне Consoleтвердження, використовуючи нову функцію C # 6 використання статичних класів:

using System.Console;
//           ^ `.Console` added.
class Program 
{ 
    static void Main() 
    { 
        WriteLine("Hello world!"); 
        WriteLine("Another message"); 
    } // ^ `Console.` removed.
}

Однак, здається, це не працює для мене. Я отримую помилку в usingзаяві, кажучи:

«А" using namespace"директива може бути застосована тільки до просторів імен;" Console"представляє собою тип не є простором імен Розгляне" using static"директиви замість того, щоб "

Я використовую візуальну студію 2015, і в мові версії для мовлення встановлено "C # 6.0"

Що дає? Чи неправильний приклад блогу msdn? Чому це не працює?


Повідомлення в блозі тепер оновлено, щоб відображати останні оновлення, але ось скріншот у випадку, якщо блог знизиться:

блог

Відповіді:


177

Здається, синтаксис трохи змінився з часу написання цих публікацій в блозі. Як випливає з повідомлення про помилку, додайте staticдо свого включення:

using static System.Console;
//      ^
class Program 
{ 
    static void Main() 
    { 
        WriteLine("Hello world!"); 
        WriteLine("Another message"); 
    } 
}

Потім ваш код буде складений.


Зауважте, що в C # 6.0 це буде працювати лише для членів, оголошених як static.

Наприклад, врахуйте System.Math:

public static class Math {
    public const double PI = 3.1415926535897931;
    public static double Abs(double value);
    // <more stuff>
}

Коли using static System.Math, ви можете просто використовувати Abs();.
Тим НЕ менше, ви все одно доведеться префіксом , PIоскільки він не є членом статичним: Math.PI;.

Починаючи з версії C # 7.2, це не повинно бути таким чином, constтакі величини, як, наприклад, PIможуть також використовуватися


3
У мене є аналогічна проблема, але замість цього System.Mathконкретно Math.PI. Коли я використовую using static System.Mathтакі методи, як Sqrt()робота, але не постійні подібні PI. Я повинен продовжувати писати, Math.PIабо код не складається. Мені цікаво, чому це не працює. Чи варто мені поставити нове запитання для цього?
одяг

5
@skwear: це звучить як матеріал для нового питання, так.
Cerbrus

1
Як швидка відповідь на питання @ skwear: "використання static - це новий вид використання пункту, який дозволяє імпортувати статичні елементи <...>" . PIне є статичним членом Mathкласу. Це постійна. Простіше кажучи: член повинен бути оголошений як static.
Чербрус

3
Звучить нагода для нового синтаксису на кшталт: using const System.Math;:)
Філіп Скакун

1
Приклад документації Microsoft заявляє, що PI можна використовувати без префікса: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Guney Ozsan

1

staticКлючове слово в usingзвіті буде імпортувати тільки один, зазначений тип (і це вкладені типи). Крім того, ви більше не повинні давати ім'я типу. Тому просто додайте статику до свого використання.

Примітка. Будь ласка, використовуйте цю функцію лише тоді, коли два класи логічно тісно пов'язані, інакше це робить читання коду досить важким.


"Ви не повинні давати ім'я типу" Що ви розумієте під цим? Де я це зробив?
Цербр

Тобіас, я їх ніде не поєдную.
Цербр

@Cerbrus О, випадково змінився контекст "так, як ти зробив", це виправить
Тобіас Брол
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.