Vantaggio della classe base generica [chiusa]

1

Qual è il vantaggio di avere una classe base generica e una classe derivata che ha se stessa come parametro generico nella classe base.

es.

public abstract class MyBase<T> {}
public MyDerived : MyBase<MyDerived> {}
    
posta Learning DotNet 30.07.2015 - 05:03
fonte

3 risposte

2

Il vantaggio rispetto a cosa? Interpreto la tua domanda come: "in quale situazione ha senso un tale costrutto?". Ho trovato un esempio standard nel blog di Eric Lippert . Sostituisci MyBase con IComparable (non importa se quest'ultimo è una classe astratta o un'interfaccia), questo porta a

public MyDerived : IComparable<MyDerived> {}

che significa semplicemente: " MyDerived oggetti possono essere confrontati con altri oggetti di tipo MyDerived " - una situazione semplice, non molto speciale, che immagino non avrà bisogno di alcuna spiegazione più approfondita.

Più generale: ogni volta che puoi pensare a un metodo significativo in una classe che prende un secondo oggetto della stessa classe (o può restituire un secondo oggetto di quella classe), hai un candidato per il tuo scenario. Quando questo metodo sembra essere generico e tu decidi di rifattorizzare questo metodo con una classe base astratta, questo porterà direttamente al costrutto.

    
risposta data 30.07.2015 - 13:26
fonte
1

Potrei essere completamente fuori di qui, ma direi che la cosa importante qui è il fatto che questo ti permette di condividere una base / interfaccia di codice astratta tra tutte le tue classi derivate, ma allo stesso tempo impedisci loro di essere direttamente correlato, ovvero impedisci l'utilizzo della classe base per creare un riferimento che punta a oggetti di qualsiasi classe derivata.

    
risposta data 30.07.2015 - 07:17
fonte
1

Lo stesso vantaggio di qualsiasi classe base: riutilizzo del codice .

Perché dovrei duplicare codice che potrebbe essere condiviso su più implementazioni di una classe base generica?

Il motivo per cui avresti implementazioni concrete che ereditano dalla base generica sarebbe se volessi aggiungere funzionalità specifiche per quel tipo concreto. (o per avere una funzione astratta nella base implementata in modo diverso attraverso le implementazioni concrete)

    
risposta data 30.07.2015 - 09:31
fonte

Leggi altre domande sui tag