2009-03-19 8 views
1

Si je crée une propriété abstraite dans ma classe C# Base, puis qu'une sous-classe l'implémente, est-il possible de la référencer et de l'utiliser ultérieurement dans une des méthodes de ma classe Base une fois la sous-classe définie? Je souhaite trier une valeur de ma sous-classe à la classe de base de sorte que dans ma classe de base, je puisse effectuer une certaine logique en l'utilisant dans cette méthode de classe de base.Possibilité d'utiliser la valeur de la propriété abstraite dans la méthode d'une classe de base?

Ou même pas une propriété mais un champ à la place ... même idée ... mais j'aurais besoin d'exiger que ce champ soit défini dans une sous-classe si le cas ... ne pense pas que ce soit même possible? Je n'ai pas vraiment besoin d'une propriété si je peux définir une sorte de drapeau dans ma sous-classe via un champ abstrait afin que la classe de base puisse utiliser ce drapeau pour une logique dont dépendra ma sous-classe comme l'envoi d'un HttpRequest. Fondamentalement, je veux être en mesure de définir un drapeau dans toutes les sous-classes utilisant cette base pour dire vrai ou faux afin que la méthode SendRequest de la classe Base sache s'il faut choisir parmi deux URI que j'ai définies dans ma classe de base. Cet indicateur déterminera le format à utiliser dans la méthode SendRequest de la classe de base, car chaque sous-classe variera en fonction du format URI que la classe de base utilisera pour cette sous-classe afin d'envoyer HttpRequest au nom de la sous-classe.

Répondre

7

Oui, c'est essentiellement le but des propriétés abstraites et des méthodes.

1

Cela ressemble à quelque chose comme ça fonctionnera:

class Base 
{ 
    protected Boolean Flag { get; set; } 

    public void Foo() 
    { 
     if (this.Flag) 
     { 
      // logic here 
     } 
    } 
} 

class Child : Base 
{ 
    public Child() 
    { 
     // you can set Flag anywhere you wish 
     this.Flag = true; 
    } 
} 

Je ne pense pas que vous avez besoin de quoi être abstract. Vous pouvez définir Flag dans le type enfant, puis le vérifier dans l'un ou l'autre type pour la logique conditionnelle.

+0

Oui en effet. La propriété ne doit être abstraite que si les classes dérivées implémentent le stockage de la propriété de manière sophistiquée, par ex. l'un utilise le registre, l'autre utilise une base de données, un autre utilise un champ plain en mémoire, etc. –

Questions connexes