Lost in the matrix

C/C++/C#/Java, Multithreading

   Il arrive quelquefois que nous devions utiliser des composants
dont certaines parties sont devenues obsolètes avec le temps.
Malheureusement, il est parfois impossible (contrainte de temps
et/ou d'argent) de refaire le code en intégralité. Ainsi, la
plupart du temps nous en-capsulons les anciens composants dans
de nouveaux.

Seulement comment interdire l'accès aux propriétés obsolètes
de la classe de base et les remplacer par de nouvelles ?

En réalité c'est assez simple. Cette problématique a été résolue
Dans la version 2 du framework .Net. Il suffit d'utiliser l'attribut
"Obsolete" et de "override" certaines propriétés.

___________________________________________________________________

using System;

namespace Test
{
class A
{
// Rem: la class A peut toujours utiliser cette propriété.
public bool OldProperty { get; set; }
}

class B : A
{
// On indique au compilateur que la propriété est obsolète
[Obsolete("utilisez NewProperty à la place.", true)]
public new bool OldProperty { get; set; } // on "override" la propriété

public bool NewProperty { get; set; }
}

class Program
{
static void Main(string[] args)
{
B test = new B();
test.NewProperty = true; // OK
test.OldProperty = true; // Provoque une erreur à la compilation
}
}
}

0 commentaires:

Enregistrer un commentaire