961 messaggi dal 29 aprile 2002
Scusate, ma non ho nenache pensato troppo che mi ritrovo a scrivere sul forum la domanda in oggetto.
Se una classe astratta deve necessariamente essere ereditata e non è possibile istanziarla perchè dovrei modificare l'accesso ai suoi membri in protected visto che sicuramente i membri di questa classe astratta verranno ereditati?
Considerando anche il fatto che c'è di mezzo l'ereditarietà singola..
Scusate ancora per l'ignoranza..
Modificato da dops il 11 settembre 2008 22.47 -
47 messaggi dal 09 settembre 2008
Esatto, non é possibile istanziare una classe astratta, potrai sono istanziare le sue classi figlie.
dops ha scritto:
Scusate, ma non ho nenache pensato troppo che mi ritrovo a scrivere sul forum la domanda in oggetto.

Male!
perchè dovrei modificare l'accesso ai suoi membri in protected visto che sicuramente i membri di questa classe astratta verranno ereditati?

Semplicemente perché il modificatore di visibilità (public/private/protected...) si riflette anche sui metodi esposti (direttamente se abstract nella classe base o indirettamente se già implementati nella classe base) dalle classi concrete che derivano dalla classe astratta.
Faccio un esempio che forse chiarisce meglio (scusa i nomi ma non ho molta fantasia):
public abstract class Base
{
    protected void Do1() {}
    public void Do2() {}
    
    protected abstract void Do3();
    public abstract void Do4();
}

public class D1 : Base
{
    protected override void Do3() {}
    public override void Do4() {}
}

public class D2 : D1
{
    public void Test()
    {
        // qui posso accedere a tutto: Do1, Do2, Do3 e Do4
    }
}

public class D3
{
    public void Test()
    {
        D2 d = new D2();
        // qui posso invocare solo Do2 e Do4 dell'istanza "d"
    }
}

Matteo Casati
GURU4.net
961 messaggi dal 29 aprile 2002
m.casati ha scritto:
dops ha scritto:
Scusate, ma non ho nenache pensato troppo che mi ritrovo a scrivere sul forum la domanda in oggetto.

Male!
perchè dovrei modificare l'accesso ai suoi membri in protected visto che sicuramente i membri di questa classe astratta verranno ereditati?

Semplicemente perché il modificatore di visibilità (public/private/protected...) si riflette anche sui metodi esposti (direttamente se abstract nella classe base o indirettamente se già implementati nella classe base) dalle classi concrete che derivano dalla classe astratta.
Faccio un esempio che forse chiarisce meglio (scusa i nomi ma non ho molta fantasia):
public abstract class Base
{
    protected void Do1() {}
    public void Do2() {}
    
    protected abstract void Do3();
    public abstract void Do4();
}

public class D1 : Base
{
    protected override void Do3() {}
    public override void Do4() {}
}

public class D2 : D1
{
    public void Test()
    {
        // qui posso accedere a tutto: Do1, Do2, Do3 e Do4
    }
}

public class D3
{
    public void Test()
    {
        D2 d = new D2();
        // qui posso invocare solo Do2 e Do4 dell'istanza "d"
    }
}


thanx ;)
Prego.
Se posso permettermi una nota sulla netiquette: non quotare mai un intero messaggio (specie se poi la formattazione si sputta.....rovina!) ma solo le parti interessanti ai fini del tuo intervento (vedi: http://it.wikipedia.org/wiki/Netiquette, punto 5 sez. "Regole e principi della netiquette")
Nel caso specifico bastava un mesaggio con "grazie".

Matteo Casati
GURU4.net

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.