Как использовать функцию C#6 "Using static"?
Я смотрю на пару новые возможности в C# 6, в частности, "использовать статический".
используя статический - это новый вид предложения using, который позволяет импортировать статические члены типов непосредственно в область видимости.
(внизу поста в блоге)
идея заключается в следующем, согласно нескольким учебникам, которые я нашел,
Вместо оф:
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
' - Это тип, а не пространство имен. Рассмотрим''"
Я использую визуальный studio 2015, и у меня есть версия языка сборки, установленная в "C# 6.0"
что это дает? Это пример в видеоролике неправильно? Почему это не работает?
сообщение в блоге было обновлено, чтобы отразить последние обновления, но вот скриншот на случай, если блог идет вниз:
2 ответа:
похоже, что синтаксис немного изменился с тех пор, как были написаны эти сообщения в блоге. Как следует из сообщения об ошибке, добавить
static
в операторе Include: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
можно использовать также.
The
static
сайта наusing
оператор будет импортировать только один, указанный тип (и это вложенные типы). Кроме того, вы больше не должны давать имя типа. Так что просто добавьте статику в свое использование.Примечание: пожалуйста, используйте эту функцию только тогда, когда два класса логически тесно связаны, в противном случае это делает чтение кода довольно трудно.