Domanda

Ecco il mio layout attuale: (la domanda è il commento)

class A
{  
    int foo;  
}

class B : A {}

class C : B
{
    void bar()
    {
        //I want to access foo
        base.foo; // Doesn't work
        base.base.foo // Doesn't work, of course
    }
}

Come si può vedere, non posso accedere ai membri di A utilizzando base in C. Come avrei potuto accedervi? Grazie:)

È stato utile?

Soluzione

Se si effettua foo protetta,

class A
{  
    protected int foo;  
}

quindi una base semplice farà:

  void bar()
  {
        //I want to access foo
        base.foo; // will work now
        // base.base.foo // Doesn't work, of course
  }

Ma sarebbe meglio costruire un (protetto) proprietà intorno foo:

   class A
   {  
        private int _foo;  
        protected int Foo 
        {
           get { return _foo; }
           set { _foo = value; }
        }
   }

Altri suggerimenti

Il campo in A viene dichiarata private. Esso deve essere protetto per le classi derivate per accedervi.

Mettere pubblico di fronte int foo;

class A
{  
    public int foo;  
}

class B : A {}

class C : B
{
    void bar()
    {
        //I want to access foo
        base.foo; // Now you can see it
    }
}

Per impostazione predefinita se non diversamente specificato tutti i membri sono privati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top