Можно ли импортировать статический класс в C #, как в VB.NET? - PullRequest
5 голосов
/ 09 октября 2010

Есть ли способ "импортировать" статический класс в C #, такой как System.Math ?

Я включил сравнение.

Imports System.Math

Module Module1

    Sub Main()
        Dim x As Double = Cos(3.14) ''This works
    End Sub

End Module

Vs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Math; //Cannot import a class like a namespace

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            double x = Math.Cos(3.14);
            double y = Cos(3.14); //Cos does not exist in current context
        }
    }
}

Ответы [ 5 ]

9 голосов
/ 14 января 2016

Обновленный ответ на этот вопрос - ДА с C # 6.0, который предоставляет функцию using static. Так, например, using static System.Math; позволяет получить доступ к статическим членам System.Math без будущей квалификации класса Math.

Смежные ответы SO:
Можно ли сократить математические ссылки в C #?
Как использовать функцию C # 6 «Использование статики»?

Внешние ссылки:
GitHub - новые возможности языка в C # 6
Intellitect - Оператор статического использования в C # 6.0

9 голосов
/ 09 октября 2010

ОБНОВЛЕНИЕ: Начиная с C # 6, ответ теперь ДА .


Нет, в C # вы можете импортировать только пространства имен, а не классы.

Однако вы можете назначить ему более короткий псевдоним:

using M = System.Math;

Теперь вы можете использовать псевдоним вместо имени класса:

double y = M.Cos(3.14);

Будьте осторожны, как выиспользуйте это, все же.В большинстве случаев код более читабелен с описательным именем, таким как Math, а не с загадочным M.


Еще одним способом использования этого является, например, импорт одного класса из пространства имен.чтобы избежать конфликтов между именами классов:

using StringBuilder = System.Text.StringBuilder;

Теперь напрямую доступен только класс StringBuilder из пространства имен System.Text.

5 голосов
/ 09 октября 2010

Нет. Вам нужно явно вызывать методы как функции классов в C #.

2 голосов
/ 09 октября 2010

Я думал, может быть, какая-то форма расширения?Конечно, это можно настроить.

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            double x = Math.Cos(3.14);
            double y = 3.14;
            Console.WriteLine(y.Cos());
        }
    }

    public static class Extension
    {
        public static double Cos(this double d)
        {
            return Math.Cos(d);
        }
    }
}
0 голосов
/ 26 января 2016

Начиная с C # версии 6, статические классы можно импортировать с помощью следующего синтаксиса.

using static System.Console;
...