Des chercheurs danois et suédois en sciences informatiques et systèmes autonomes ont décortiqué la sécurité...
Nvidia se prépare à livrer la plate-forme serveur HGX-2 qui sera capable d'exploiter la puissance de 16 GPU Tesla V100...
L'EMD, une école de commerce située à Marseille ouvre à la prochaine rentrée l'école du numérique...
C#
, et ce de deux façons différentes. .NET Framework
utilisent les espaces de noms à des fins d'organisation.
System
est un espace de noms et Console
est une classe de cet espace de noms.
namespace
est utilisé pour déclarer une portée qui contient un ensemble d'objets connexes.
Vous pouvez utiliser un espace de noms pour organiser les éléments de code et créer des types globaux uniques.class
interface
struct
enum
delegate
C#
.
Cet espace de noms sans nom, parfois appelé espace de noms global, est présent dans chaque fichier.
Tout identificateur dans l'espace de noms global peut être utilisé dans un espace de noms nommé.public
, et cela n'est pas modifiable. MyCompany
:static
dans un espace de noms imbriqué.
C#
commencent par une section de directives using
.static
et aux types imbriqués d'un type sans devoir qualifier l'accès avec le nom du type.using static
.using alias
.using
est également utilisé pour créer des instructions usingIDisposable
, qui garantissent que les objets tels que les fichiers
et les polices sont gérés correctement.using
(Instruction).using
se limite au fichier dans lequel elle apparaît.
La directive using
peut être placée :CS1529
est générée.using
afin de faciliter la qualification d'un identificateur pour un espace de noms ou un type.
Dans une directive using
, le type ou l'espace de noms complet doit toujours être utilisé, indépendamment des directives using
placées avant.
Aucun alias using
ne peut être utilisé dans la déclaration d'une directive using
.using
pour utiliser les types dans un espace de noms sans avoir à spécifier l'espace de noms.
Une directive using
ne vous donne pas accès à des espaces de noms imbriqués dans l'espace de noms que vous spécifiez.using
pour un espace de noms :using
ne peut pas avoir un type générique ouvert sur le côté droit.
Par exemple, vous ne pouvez pas créer un alias using
pour un List‹T›
, mais vous pouvez en créer un pour un List‹int›
.using
et un alias using
pour une classe :
using static
désigne un type dont vous pouvez accéder aux membres statiques et aux types imbriqués sans spécifier de nom de type. Sa syntaxe est la suivante :fully-qualified-type-name
est le nom du type dont les membres statiques et les types imbriqués peuvent être référencés sans spécifier de nom de type.C#
génère l'erreur du compilateur CS0246
: " Le type ou le nom d'espace de noms 'type/espace de noms' est introuvable (une directive using
ou une référence d'assembly est-elle manquante ?) ".
using static
s'applique à tout type ayant des membres statiques (ou des types imbriqués), même s'il a également des membres d'instance.
Toutefois, les membres d'instance ne peuvent être appelés que par l'instance du type.Circle
référence un certain nombre de membres de la classe Math
.Math
chaque fois qu'un membre est référencé, la directive using static
génère du code beaucoup plus clair :using static
importe uniquement les membres statiques accessibles et les types imbriqués déclarés dans le type spécifié.
Les membres hérités ne sont pas importés. Vous pouvez importer à partir de n'importe quel type nommé avec une directive static
.using static
rend les méthodes d'extension déclarées dans le type spécifié disponibles pour la recherche de méthode d'extension.
Toutefois, les noms des méthodes d'extension ne sont pas importés dans la portée pour la référence non qualifiée dans le code.using static
dans la même unité de compilation ou le même espace de noms forment un groupe de méthodes.
La résolution de surcharge au sein de ces groupes de méthodes suit des règles C#
normales.using static
pour que les membres statiques des classes Console
, Math
et String
soient disponibles sans que vous ayez à spécifier leur nom de type.
IDisposable
.using
.File
et Font
sont des exemples de types managés qui accèdent à des ressources non managées (dans le cas présent, des handles de fichiers et des contextes d'appareil).
Beaucoup d'autres types de ressources non managées et de bibliothèques de classes peuvent les encapsuler.
Tous les types de cette sorte doivent implémentent l'interface IDisposable
.IDisposable
est limitée à une seule méthode, vous devez le déclarer et l'instancier dans l'instruction using
.
L'instruction using
appelle la méthode Dispose
correctement sur l'objet et, quand vous l'utilisez comme indiqué précédemment, elle met également l'objet lui-même hors de portée dès que Dispose
est appelée.
Dans le bloc using
, l'objet est en lecture seule et ne peut être ni modifié ni réassigné.using
garantit que Dispose
est appelée même si une exception se produit dans le bloc using
.
Vous pouvez obtenir le même résultat en plaçant l'objet dans un bloc try
, puis en appelant Dispose
dans un bloc finally
; c'est d'ailleurs ainsi que l'instruction using
est traduite par le compilateur.
L'exemple de code précédent se développe pour donner le code suivant au moment de la compilation (notez les accolades supplémentaires pour créer la portée limitée de l'objet) :using
, comme indiqué dans l'exemple suivant :using
.
Dans ce cas, une fois que le contrôle a quitté le bloc using
, l'objet reste dans la portée mais n'a probablement pas accès à ses ressources non managées.
En d'autres termes, il n'est plus complètement initialisé. Si vous essayez d'utiliser l'objet à l'extérieur du bloc /code>using, vous risquez de provoquer la levée d'une exception
.
C'est pourquoi il est généralement préférable d'instancier l'objet dans l'instruction using
et de limiter sa portée au bloc using
.extern
est également utilisé comme modificateur de méthode, déclarant une méthode écrite en code non managé.
/r:GridV1=grid.dll
/r:GridV2=grid20.dll
GridV1
et GridV2
.
Pour utiliser ces alias à partir d'un programme, référencez-les en utilisant le mot clé extern
. Par exemple :extern alias GridV1;
extern alias GridV2;
GridV1::Grid
serait le contrôle de grille de grid.dll
, et GridV2::Grid
serait le contrôle de grille de grid20.dll
.