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#
: les types référence et les types valeur.in
, ref
et out
).class
interface
delegate
C#
fournit également les types référence intégrés suivants :dynamic
object
string
class
, comme l'illustre l'exemple suivant :C#
ne permet qu'un seul héritage.
Cela signifie qu'une classe peut uniquement hériter de l'implémentation d'une seule classe de base.
Toutefois, une classe peut implémenter plusieurs interfaces.Héritage | Exemple |
---|---|
Aucun | class ClassA { } |
Single | class DerivedClass: BaseClass { } |
Aucun, implémente deux interfaces | class ImplClass: IFace1, IFace2 { } |
Unique, implémente une seule interface | class ImplDerivedClass: BaseClass, IFace1 { } |
public
ou internal
.
Par défaut, les classes sont internal
.public
, protected internal
, protected
, internal
, private
ou private protected
.
Par défaut, ils sont private
.Child
, contient deux champs privés (name
et age
), deux constructeurs public
et une méthode public
.
La deuxième, StringTest
, contient Main
.name
et age
) ne sont accessibles que par le biais de la méthode publique de la classe Child
.
Par exemple, vous ne pouvez pas imprimer le name
de Child
à partir de la méthode Main
en utilisant une instruction comme celle-ci :private
de Child
à partir de Main
est uniquement possible si Main
est un membre de la classe.private
,
les données membres dans cet exemple sont toujours private
si le mot clé est supprimé.child3
), le champ age est initialisé par défaut à la valeur zéro.delegate
est semblable à une signature de méthode.
Elle a une valeur de retour et un nombre quelconque de paramètres de type quelconque :delegate
est un type référence qui peut être utilisé pour encapsuler une méthode anonyme ou nommée.delegate
sont la base des événements. Un delegate
peut être instancié en l'associant à une méthode nommée ou anonyme.delegate
doit être instancié avec une méthode ou une expression lambda qui a un type de retour compatible et des paramètres d'entrée.
Pour une utilisation avec des méthodes anonymes, le délégué et le code à lui associer sont déclarés ensemble.
Les deux façons d'instancier un delegate
sont décrites dans cette section.dynamic
permet aux opérations dans lesquelles il se produit de contourner la vérification de type au moment de la compilation.
Au lieu de cela, ces opérations sont résolues au moment de l'exécution.
Le type dynamic
simplifie l'accès aux API COM
telles que les API Office Automation
, et également aux API
dynamiques telles que les bibliothèques IronPython
et au modèle DOM (Document Object Model) HTML
.dynamic
se comporte comme le type object dans la plupart des cas.
Toutefois, les opérations qui contiennent des expressions de type dynamic
ne sont pas résolues et leur type n'est pas vérifié par le compilateur.
Le compilateur empaquète des informations sur l'opération, qui sont ensuite utilisées pour évaluer l'opération au moment de l'exécution.
Dans le cadre du processus, les variables de type dynamic
sont compilées dans des variables de type object
.
Ainsi, le type dynamic
existe seulement au moment de la compilation, et non au moment de l'exécution.dynamic
à une variable de type object.
Pour vérifier le type de chaque variable au moment de la compilation, placez le pointeur de la souris sur dyn
ou obj
dans les instructions WriteLine
.
IntelliSense
affiche dynamic
pour dyn
et object
pour obj
.WriteLine
affichent les types d'exécution de dyn
et obj.
À ce stade, tous deux ont le même type, entier. La sortie suivante est produite :System.Int32
System.Int32
dyn
et obj
au moment de la compilation,
ajoutez les deux lignes suivantes entre les déclarations et les instructions WriteLine
de l'exemple précédent.obj + 3
.
Toutefois, aucune erreur n'est signalée pour dyn + 3
. L'expression qui contient dyn
n'est pas vérifié au moment de la compilation, car le type de dyn
est dynamic
.dynamic
peut apparaître directement ou en tant que composant d'un type construit dans les situations suivantes :dynamic
dans plusieurs déclarations différentes.is
ou d'un opérateur as
,
ou comme argument de typeof
dans le cadre d'un type construit. Par exemple, dynamic
peut être utilisé dans les expressions suivantes.dynamic
dans plusieurs déclarations.
La méthode Main
compare également la vérification de type au moment de la compilation avec la vérification de type au moment de l'exécution.
interface
contient uniquement des signatures de méthodes, de propriétés, d'événements ou d'indexeurs.
Une class
ou un struct
qui implémente l'interface doit implémenter les membres de l'interface qui sont spécifiés dans la définition de l'interface.
Dans l'exemple suivant, la class ImplementationClass
doit implémenter une méthode nommée SampleMethod
qui n'a aucun paramètre et qui retourne void
.interface
peut hériter d'une ou de plusieurs interfaces de base.
Lorsqu'une liste de types de base contient une classe de base et des interfaces, la classe de base doit figurer en premier dans la liste.IPoint
ont les propriétés entières x
et y
.object
est un alias de Object
dans .NET
.
Dans le système de type unifié de C#
, tous les types (les types référence et valeur, prédéfinis ou définis par l'utilisateur)
héritent directement ou indirectement du type Object
.
Vous pouvez assigner des valeurs de tout type aux variables de type object
.
Quand une variable d'un type valeur est convertie en type objet
, elle est dite boxed
.
Quand une variable de type objet
est convertie en type valeur, elle est dite unboxed
.object
acceptent des valeurs de tout type de données et comment les variables de type object
utilisent des méthodes d'Object
du .NET Framework
.
string
représente une séquence de zéro, un ou plusieurs caractères Unicode.
string
est un alias de String
dans .NET
.string
soit un type référence, les opérateurs d'égalité (==
et !=
) sont définis pour comparer les valeurs d'objets string
, pas les références.
Cela permet de tester l'égalité de chaînes de façon plus intuitive. Par exemple :"True"
, puis "False"
, car le contenu des chaînes est équivalent, mais a
et b
ne font pas référence à la même instance de chaîne.+
concatène les chaînes :objet String
qui contient good morning
.String
après avoir créé l'objet
,
bien que la syntaxe semble indiquer le contraire. Par exemple, lorsque vous écrivez ce code, le compilateur crée en fait un nouvel objet String
pour stocker la nouvelle séquence de caractères, et ce nouvel objet
est assigné à b
. La chaîne h
est alors disponible pour le garbage collector
.[]
peut être utilisé pour un accès en lecture seule aux différents caractères d'un objet string
:[]
permet également d'itérer sur chaque caractère dans un string
:string
et peuvent être écrits sous deux formes,
entre guillemets et @-quoted. Les littéraux de chaîne entre guillemets sont placés entre guillemets doubles ("
) :\\
pour la barre oblique inverse, \u0066
pour la lettre f
et \n
pour un saut de ligne.\udddd
(où dddd
est un nombre à quatre chiffres) représente le caractère Unicode U+dddd
.
Les codes d'échappement Unicode à huit chiffres sont également reconnus : \Udddddddd
.
@
et sont placés entre guillemets doubles. Par exemple :@-quoted
, doublez-le :