Classi e costanti astratte

3

Ho due classi che condividono molto codice e sono concettualmente variazioni su una classe comune. Quindi voglio una classe astratta che contenga tutto il loro codice comune e quindi possono ereditarla e riempire le cose uniche per loro. Tuttavia sto incontrando un problema con costanti e metodi statici. Fondamentalmente, la relazione che ho è così:

Sia la Classe A che la Classe B hanno alcuni metodi che non dipendono da un'istanza della classe, ma solo il valore di un insieme di stringhe costanti. Sostanzialmente come tale:

const string onePrefix;
const string differentPrefix;

static string ConvertMethod(string input)
{
  input.replace(onePrefix, differentPrefix);
}

Il codice del metodo è lo stesso tra le due classi, quindi mi piacerebbe averlo nella classe astratta. Ma i valori effettivi delle due costanti sono diversi tra le due classi. Ma le costanti astratte non sono una cosa che puoi fare per quanto posso dire, quindi non sono sicuro di come strutturare le mie classi per fare in modo che funzioni come vorrei. Ho considerato di non avere i valori come costanti, ma sono usati nei miei costruttori prima che venga creato un oggetto istanziato.

    
posta HamHamJ 24.03.2015 - 21:04
fonte

2 risposte

4

È un po 'un codice per me sentire che hai una costante che vuoi condividere polimorficamente tra due classi in modo che possano definirla da sola.

Le costanti di design sono state fatte per non essere influenzate dal polimorfismo quindi ti suggerirei di trasformarlo in una proprietà astratta nella tua classe base astratta.

Potresti farlo o avere una lezione concreta come il tuo supertipo. Quindi eredita tutte le funzionalità comuni dalla tua classe concreta mentre hai le costanti definite in ciascuna sottoclasse a cui puoi accedere quando le aggiungi.

    
risposta data 24.03.2015 - 21:15
fonte
2

Prova una variabile readonly . MSDN dice questo:

The readonly keyword differs from the const keyword. A const field can only be initialized at the declaration of the field. A readonly field can be initialized either at the declaration or in a constructor. Therefore, readonly fields can have different values depending on the constructor used. Also, although a const field is a compile-time constant, the readonly field can be used for run-time constants, as in this line: public static readonly uint l1 = (uint)DateTime.Now.Ticks;

    
risposta data 27.03.2015 - 22:51
fonte

Leggi altre domande sui tag