Notes 3 Résumé

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 10

INDEXEURS

• Les indexeurs sont des propriétés qui permettent


d’utiliser l’opérateur [] pour indexer des éléments
contenus/calculés dans la classe à la manière des
tableaux de 1, 2..n dimensions.
public class Vector {
private double[] data;
public Vector(int size) {
data = new double[size];
}
public int Size{
get{return data.Length}
}
public double this [int idx]{
get{ return data[idx];}
set{ data[idx] = value;}
} Fadel TOURÉ 8
}
OPÉRATEURS
• On peut définir/redéfinir les opérateurs
unaires ou binaires dans les classes. (+, -, ==…)
public static bool operator ==(Vector a, Vector b){
if(a.Size != b.Size){
return false;
}

for(var i = 0; i < a.Size; i++){


if(a[i] != b[i]){
return false;
}
}
return true;
}
Fadel TOURÉ 9
OPÉRATEURS
• On peut redéfinir des opérateurs de
conversion implicite (promotion)
public class Vector {

private double[] data;
public static implicit operator double(Vector v){
var norme2 = 0;
foreach(var d in v){
norme2+= d*d;
}
return Math.Sqrt(norme2);
}
}
Vector v = new Vector(4, 3);
double norme = v;
Console.WriteLine(norme);
Fadel TOURÉ 10
OPÉRATEURS
• On peut surcharger des opérateurs de
conversion explicite (cast)
public class Vector {
private double[] data;
public static explicit operator float(Vector v){
var norme2 = 0.0;
foreach(var d in v){
norme2+= d*d;
}
return Math.Sqrt(norme2);
}
}

Vector v = new Vector(5, 5);


float normef = (float)v;
Console.WriteLine(normef);
Fadel TOURÉ 11
STRUCT
• L’utilisation adéquate des struct à la place des class peut faire une grande
différence lors de l’allocation de la mémoire.
• Dans l’exemple suivant, le programme crée et initialise 1 tableau de 100
points.
– Si Point est implémenté comme class, 101 différents objets sont instanciés.
Lesquels ?
– Si Point est implémenté comme struct, juste 1 objet est instancié. Lequel ?

public class PointExample {


public static void Main() {
Point[] points = new Point[100];
for (int i = 0; i < 100; i++)
points[i] = new Point(i, i);
}
}

Fadel TOURÉ 14
INTERFACES
interface HasText {
string Text { get; set; }
}
interface Readable {
string Read();
}
class TextField : HasText, Readable {
private String text;
public string Text{
get { return text; }
set { text = value; }
}
public string Read() {
return "here is the " + Text;
}
}
Voir l’implémentation d’interface membre ici
https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/interfaces
Fadel TOURÉ 20
HÉRITAGE
• Une classe fille n’hérite pas des constructeurs de la classe de
base. Elle en redéfinit un et appelle les constructeurs de la
mère grâce à :base()
public class Point {
public int x, y;
public Point(int x, int y) {
this.x = x; this.y = y;
}
}
public class Point3D: Point {
public int z;
public Point3D(int x, int y, int z) : base(x, y) {
this.z = z;
}
}

Fadel TOURÉ 22
ABSTRACTION
public abstract class Figure{
protected abstract double Perimeter{get;}
public abstract void Draw();
}

• Les méthodes abstraites protégées sont censées


être appelées dans la classe abstraite (ou leurs
filles).
• Une class abstraite peut contenir des méthodes
concrètes (sinon autant en faire une interface).
• Ces classes abstraites permettent d’implémenter
des composants réutilisables.
• Une méthode abstraite est automatiquement
virtuelle.
Fadel TOURÉ 24
REDÉFINITION DE METHODE
• Pour qu’une méthode non virtuelle soit redéfinissable,
elle doit être définie explicitement virtuelle.
– Modificateur virtual lors de la déclaration d’une nouvelle
méthode potentiellement redéfinissable.
• Il est obligatoire d’utiliser le modificateur override lors
de la redéfinition d’une méthode virtuelle
– override donne une nouvelle implémentation d’une
méthode virtual.
• L’appel d’une méthode virtuelle conduit à un
traitement retardé (jusqu’au runtime) afin de
déterminer la version à exécuter en fonction du type
de l’objet: Polymorphisme.

Fadel TOURÉ 25
REDÉFINITION & ABSTRACTION
• Une méthode abstraite est naturellement une
méthode virtuelle, elle est faite pour être redéfinie.
– Une méthode abstraite n’a besoin pas d’être déclarée
virtual.
– Les classes filles ne redéfinissant pas toutes les méthodes
virtual de leur mère sont de facto abstraites.
• La surdéfinition (overloading) donne une nouvelle
description du comportement initial.
– même nom, signature différente.
• La redéfinition (orverriding) donne une nouvelle
version du comportement initial.
– même signature, comportement diffèrent selon l’objet.

Fadel TOURÉ 26

Vous aimerez peut-être aussi