Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C#: Konstruktorin kutsuminen konstruktorista

AtskaFin [09.02.2019 13:50:32]

#

Sama tapahtuu javassa vissiinkin näin:

class Henkilo
{
   private int ika;

   public Henkilo()
   {
      this(0);
   }

   public Henkilo(int ikaAlussa)
   {
      this.ika = ikaAlussa;
   }
}

Miten saman saa toimimaan C#:lla?

AtskaFin [09.02.2019 21:42:47]

#

Tämä näköjään toimii, mutta haluaisin ensimmäisen konstruktorin kutsuvan toista konstruktoria, eikä toisinpäin. Kokeilin, mutta Visual Studio ilmoittaa sen vääräksi :/

class Henkilo
{
   private int ika;
   private int ika2;

   public Henkilo()
   {
      this.ika = 0;
   }

   public Henkilo(int ikaAlussa)
   : this()
   {
      this.ika2 = ikaAlussa;
   }
}

Lisäys: Oho sori omaa tyhmyyttä, sain toimii

Grez [10.02.2019 07:40:06]

#

Sinänsä toi sun esimerkissä oleva this.ika = 0 on turha, koska luokan jäsen-int on .Netissä alustettu oletuksena 0:ksi.

Mutta jos haluaisit että ilman parametreja Henkilö saisi iäksi vaikka 7 vuotta, niin tyylikkäimmin se minusta menisi näin:

class Henkilo
{
    private int ika;
    private int ika2;

    public Henkilo(int ikaAlussa = 7)
    {
        ika2 = ikaAlussa;
    }
}

Jos ihan haluat käyttää toista konstruktoria toisesta, niin se onnistuu tietysti näin:

class Henkilo
{
    private int ika;
    private int ika2;

    public Henkilo() : this(7)
    {
    }
    public Henkilo(int ikaAlussa )
    {
        ika2 = ikaAlussa;
    }

Toi että "this." tungetaan turhaan joka väliin on vissiin joku Javatyyli?

Niin kuin ilmeisesti huomasitkin, niin et tietenkään voi määritellä konstruktoreita niin että ne viittaavat ristiin toisiinsa.

AtskaFin [12.02.2019 16:48:50]

#

Ai eikö luokassa, josta luodaan olioita tarvitse käyttää tuota "this."?

Metabolix [12.02.2019 17:29:24]

#

Ei tarvitse kirjoittaa this. Se on tarpeen ainoastaan silloin, kun jäsenellä ja parametrilla on sama nimi ja nämä pitää erottaa (kuten this.ikä = ikä) tai kun halutaan viitata koko nykyiseen olioon (kuten muu.metodi(this)).

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta