Abstract

De Banane Atomic
Révision datée du 4 décembre 2017 à 14:52 par Nicolas (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche

Définition

Une classe abstraite possède au moins un membre abstrait, elle ne peut donc pas être instanciée.
A la différence d'une interface, elle peut contenir du code.

Code

Csharp.svg
interface IInterface
{
    int MyProperty { get; set; }
    void MyMethod();
}

// une classe doit être déclarée abstraite si elle possède au moins un membre abstrait
// elle ne peut être instanciée
abstract class AbstractClass : IInterface
{
    // les membres abstrait, à la différence des membres virtuels, ne contiennent pas d'implémentation
    public abstract int MyProperty { get; set; }
    public abstract void MyMethod();

    // à la différence de l'interface la classe abstraite peut avoir des champs,
    // des méthodes et des propriétés non-abstraites implémentées
    int _myField = 0;
    public void MyOtherMethod() { /* code */ }

    // constructeur, sert seulement à factoriser le code des constructeurs implémentant la classe abstraite
    protected AbstractClass(string argument)
    {
        MyProperty = argument;
    }
}

// la classe qui hérite d'une classe abstraite doit implémenter ses membres abstraits
class MyClass : AbstractClass
{
    public override int MyProperty
    { 
        get { /* code */ }
        set { /* code */ }
    }

    public override void MyMethod() { /* code */ }

    public MyClass(string argument) : base(argument)
    { }
}