Tutoriel par Examples: class



Déclaration: class MyGenericClass<T1, T2, T3, ...> { // Do something with the type parameters. } Initialisation: var x = new MyGenericClass<int, char, bool>(); Utilisation (comme type de paramètre): void AnotherMethod(MyGenericClass<float, byte, char> arg) { ... }
Un constructeur d'une classe de base est appelé avant qu'un constructeur d'une classe dérivée ne soit exécuté. Par exemple, si Mammal étend Animal , le code contenu dans le constructeur de Animal est appelé en premier lors de la création d'une instance de Mammal . Si une classe dér...
Lorsqu'un graphe d'objet est finalisé, l'ordre est l'inverse de la construction. Par exemple, le super-type est finalisé avant le type de base, comme le montre le code suivant: class TheBaseClass { ~TheBaseClass() { Console.WriteLine("Base class finalized!&...
Pour éviter la duplication de code, définissez des méthodes et des attributs communs dans une classe générale en tant que base: public class Animal { public string Name { get; set; } // Methods and attributes common to all animals public void Eat(Object dinner) { // ....
public class Animal { public string Name { get; set; } } public interface INoiseMaker { string MakeNoise(); } //Note that in C#, the base class name must come before the interface names public class Cat : Animal, INoiseMaker { public Cat() { Name = "Ca...
public class LivingBeing { string Name { get; set; } } public interface IAnimal { bool HasHair { get; set; } } public interface INoiseMaker { string MakeNoise(); } //Note that in C#, the base class name must come before the interface names public class Cat : LivingBei...
Pour créer une classe prenant en charge les initialiseurs de collection, il doit implémenter l'interface IEnumerable et disposer d'au moins une méthode Add . Depuis C # 6, toute collection implémentant IEnumerable peut être étendue avec des méthodes Add personnalisées à l'aide de méthod...
public class SomeClass { public void DoStuff() { } protected void DoMagic() { } } public static class SomeClassExtensions { public static void DoStuffWrapper(this SomeClass someInstance) { someInstance.DoStuff(); // ok ...
var now = DateTime.UtcNow; //accesses member of a class. In this case the UtcNow property.
var zipcode = myEmployee?.Address?.ZipCode; //returns null if the left operand is null. //the above is the equivalent of: var zipcode = (string)null; if (myEmployee != null && myEmployee.Address != null) zipcode = myEmployee.Address.ZipCode;
var age = GetAge(dateOfBirth); //the above calls the function GetAge passing parameter dateOfBirth.
var letters = "letters".ToCharArray(); char letter = letters[1]; Console.WriteLine("Second Letter is {0}",letter); //in the above example we take the second character from the array //by calling letters[1] //NB: Array Indexing starts at 0; i.e. the first letter would be give...
var letters = null; char? letter = letters?[1]; Console.WriteLine("Second Letter is {0}",letter); //in the above example rather than throwing an error because letters is null //letter is assigned the value null
6,0 Vous permet d'importer un type spécifique et d'utiliser les membres statiques du type sans les qualifier avec le nom du type. Cela montre un exemple utilisant des méthodes statiques: using static System.Console; // ... string GetName() { WriteLine("Enter your name.&quo...
Les classes héritent de System.Object, sont des types de référence et vivent sur le tas. Lorsque les types de référence sont passés en paramètre, ils sont transmis par référence. public Class MyClass { public int a; public int b; } Passé par référence signifie qu'une référence au ...
Les contraintes de type peuvent forcer un paramètre de type à implémenter une certaine interface ou classe. interface IType; interface IAnotherType; // T must be a subtype of IType interface IGeneric<T> where T : IType { } // T must be a subtype of IType class Generic<T>...
Il est possible de spécifier si l'argument de type doit ou non être un type de référence ou un type de valeur en utilisant la class ou la struct contraintes correspondante. Si ces contraintes sont utilisées, elles doivent être définies avant que toutes les autres contraintes (par exemple, un ty...
Les développeurs peuvent être surpris par le fait que l'inférence de type ne fonctionne pas pour les constructeurs: class Tuple<T1,T2> { public Tuple(T1 value1, T2 value2) { } } var x = new Tuple(2, "two"); // This WON'T work... var y = new Tuple&l...
Contrairement aux interfaces, qui peuvent être décrites comme des contrats d’implémentation, les classes abstraites servent de contrats d’extension. Une classe abstraite ne peut pas être instanciée, elle doit être étendue et la classe résultante (ou la classe dérivée) peut être instanciée. Les cl...
Les génériques permettent aux classes, interfaces et méthodes de prendre d'autres classes et interfaces en tant que paramètres de type. Cet exemple utilise la classe générique Param pour prendre un seul paramètre de type T , délimité par des crochets ( <> ): public class Param<T> {...

Page 1 de 28