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?
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
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.
Ai eikö luokassa, josta luodaan olioita tarvitse käyttää tuota "this."?
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)
).
Aihe on jo aika vanha, joten et voi enää vastata siihen.