8 votes

Peut-on importer une classe statique en C# comme en VB.NET ?

Existe-t-il un moyen d'"importer" une classe statique en C#, comme par exemple System.Math ?

J'ai inclus une comparaison.

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
        }
    }
}

10voto

Guffa Points 308133

UPDATE : À partir de C# 6, la réponse est maintenant OUI .


Non, en C#, vous ne pouvez importer que des espaces de noms, pas des classes.

Cependant, vous pouvez lui donner un alias plus court :

using M = System.Math;

Vous pouvez maintenant utiliser l'alias au lieu du nom de la classe :

double y = M.Cos(3.14);

Faites attention à la façon dont vous l'utilisez, cependant. La plupart du temps, le code est plus lisible avec un nom descriptif tel que Math plutôt qu'un énigmatique M .


Une autre utilisation consiste à importer une seule classe d'un espace de noms, par exemple pour éviter les conflits entre les noms de classes :

using StringBuilder = System.Text.StringBuilder;

Maintenant, seul le StringBuilder de la classe System.Text est directement disponible.

9voto

u8it Points 1883

Une réponse actualisée à cette question est OUI à partir de C# 6.0, qui fournit une fonction using static caractéristique. Donc, par exemple, using static System.Math; permet aux membres statiques de System.Math à laquelle on peut accéder sans qualification future de la Math classe.

Réponses SO connexes :
Les références mathématiques peuvent-elles être raccourcies en C# ?
Comment utiliser la fonction "Using static" de C#6 ?

Références externes :
GitHub - Nouvelles fonctionnalités du langage en C# 6
Intellitect - Déclaration statique d'utilisation en C# 6.0

5voto

CesarGon Points 8710

Il n'y en a pas. Vous devez invoquer explicitement les méthodes en tant que caractéristiques des classes en C#.

2voto

Je pensais peut-être à une forme de méthodes d'extension ? Cela pourrait être modifié, bien sûr.

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);
        }
    }
}

0voto

Nantharupan Points 25

À partir de la version 6 de C#, les classes statiques peuvent être importées par la syntaxe suivante.

using static System.Console;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X