2010-06-06 9 views
7

ho una classe di base come questo:L'estrazione di una proprietà può essere astratta e l'insieme essere virtuale?

public class Trajectory{ 
    public int Count { get; set; } 
    public double Initial { get; set { Count = 1; } } 
    public double Current { get; set { Count ++ ; } } 
} 

Così, ho il codice nella classe base, il che rende il set-s virtuale, ma il get-s deve rimanere astratto. Quindi ho bisogno di qualcosa del genere:

... 
public double Initial { abstract get; virtual set { Count = 1; } } 
... 

Ma questo codice dà un errore. L'intero punto è implementare la funzionalità di conteggio nella classe base in tutte le classi derivate. Quindi, come posso ottenere l'ottenimento e l'impostazione di una proprietà con diversi modificatori?

+2

Forse dovresti scrivere metodi SetInitial GetInitial separati ... – Marko

+4

Ho difficoltà a capire l'intenzione dietro il tuo codice. È estremamente insolito avere un setter per una proprietà che ignora il valore di input impostato. Se modifichi questo metodo per usare i metodi (senza alcun valore di input inutilizzato per confondere le cose), non c'è più bisogno di un get/virtual set astratto. –

+0

Il punto di un setter è che "imposta" (in qualche modo) il valore immesso. Il modo in cui implementi il ​​tuo set, è più un metodo. – Henri

risposta

10

dividerlo in 2 funzioni:

public double Initial 
{ 
    get { return GetInitial(); } 
    set { SetInitial(value); } 
} 

protected virtual void SetInitial(double value) 
{ 
    Count = 1; 
} 

protected abstract double GetInitial(); 
1

renderlo né astratta né virtuale. E rendere il campo di supporto privato. In questo modo, una classe derivata non può ignorarla e non può interferire con essa.

0

No, non è possibile. Almeno non ho trovato una soluzione.

Se la proprietà è contrassegnata come abstract, allora né getter e setter possono avere corpi.

Problemi correlati