J'ai une classe abstraite qui définit une get
mais pas set
car, en ce qui concerne cette classe abstraite, elle n'a besoin que d'un fichier get
.
public abstract BaseClass
{
public abstract double MyPop
{get;}
}
Cependant, dans certaines classes dérivées, j'ai besoin d'une fonction set
donc je regarde cette implémentation
public class DClass: BaseClass
{
public override double MyPop
{get;set;}
}
Le problème est que j'ai obtenu une erreur de compilation, disant que
*.set : ne peut pas être surchargé car *. n'a pas d'accesseur set surchargé.
Même si je pense que la syntaxe ci-dessus est parfaitement légitime.
Une idée à ce sujet ? Une solution de contournement ou la raison de cette situation ?
Edit : La seule approche à laquelle je pense est de mettre les deux get
y set
comme dans la classe abstraite, et laisser la sous-classe lancer un NotImplementedException
si set
est appelé et ce n'est pas nécessaire. C'est quelque chose que je n'aime pas, de même qu'un méthode spéciale de réglage .
0 votes
Décomposons un peu. Vous devez construire un ensemble de classes qui exposent une méthode de lecture d'un fichier
double
qui sera mise en œuvre spécifiquement dans chaque classe. Parfois, cette valeur devra être définie, et donc certaines de ces classes devraient exposer un moyen de la définir. Est-ce bien le cas ? Combien de niveaux d'héritage devez-vous utiliser ?1 votes
@Codesleuth : oui. Quant au nombre de niveaux d'héritage, je ne vois pas en quoi cela est pertinent pour la question ?
0 votes
David, ironiquement, cela ressemble à une question à laquelle je ne veux pas accepter de réponse.
3 votes
Je ne comprends pas pourquoi cela est possible pour les interfaces mais pas pour les classes abstraites. Pourquoi ?
0 votes
C'est trop nul. Est-ce que quelqu'un comprend pourquoi ce n'est pas possible ? Les propriétés get et set sont vraiment traduites en équivalents de méthodes quelque part sur la route de la compilation, n'est-ce pas ? Donc la virtualité de ces méthodes pourrait être des questions isolées ? edit : Je pense que j'ai peut-être trouvé ma réponse ici : stackoverflow.com/questions/82437/
0 votes
Notez que cette fonctionnalité est à l'étude depuis 2016 (cf. github.com/dotnet/roslyn/issues/9482 ). Il s'agit actuellement d'un caractéristique du carnet de commandes .