2013-09-23 38 views
7

Ho la seguente classe con alcuni metodi e vorrei usarla come una classe base di un'altra classe.Quale sarebbe il giusto modificatore?

public class BaseClass 
{ 
    public string DoWork(string str) 
    { 
     // some codes... 
    } 

    // other methods... 
} 

Non voglio questa classe da un'istanza, ma la classe derivata dovrebbe comunque utilizzare l'implementazione originale dei metodi della sua classe base.

È possibile? Quale dovrebbe essere il mio modificatore?

+5

è necessario 'abstract'. –

+0

ma l'abstract non contiene alcuna implementazione giusta? – yonan2236

+0

@ yonan2236 no. Le classi astratte possono contenere metodi e proprietà concrete. Altrimenti non sarebbero davvero così diversi dalle interfacce (a parte dichiarare membri non pubblici) –

risposta

6

Poiché non si desidera creare un'istanza di questa classe, trasformarla in una classe abstract. Puoi ancora avere implementazione sulla classe.

frammento,

public abstract class BaseClass 
{ 
    public virtual string DoWork(string str) 
    { 
     // can have implementation here 
     // and classes that inherits can overide this method because of virtual. 
    } 

    // other methods... 
} 
+1

perché il metodo è virtuale? – yonan2236

+0

@ yonan2236 quindi il metodo può essere ignorato. –

+0

oh, quindi significa che la classe derivata può avere la propria implementazione del metodo 'DoWork'? destra? – yonan2236

7

Fai BaseClassabstract:

public abstract class BaseClass 
{ 
    // Only available to BaseClass 
    private string _myString; 

    public string DoWork(string str) 
    { 
     // Available to everyone 
     return _myString; 
    } 

    protected void DoWorkInternal() { 
     // Only available to classes who inherit base class 
    } 
} 

In questo modo, è possibile definire il proprio codice all'interno BaseClass - ma non può essere inizializzatodirettamente, deve essere ereditato da.

+0

'DoWork' dovrebbe probabilmente essere contrassegnato come' virtuale'. –

+2

@ Mr.Smith non ne sono sicuro. OP dice "ma la classe derivata dovrebbe ancora usare l'implementazione originale dei metodi della sua classe base". Penso che non voglia 'virtuale'. –

Problemi correlati