Codice inline nei costruttori

martedì 17 ottobre 2006 - 19.01

puma.net Profilo | Newbie

Dunque, C#, ho due classi una base e una derivata. Devo richiamare il costruttore della classe base dalla derivata, e fin qui è banale, base(...). Il mio problema è che devo eseguire del codice per ottenere il parametro da passare alla classe base. Non si può nè chiamare il costruttore della Base dal corpo del costruttore della Derivata, nè scrivere codice inline, giusto? Io ho risolto come sotto, mi dite se c'è un modo più furbo?

class Base { private string _name; private string _altro; public Base(string name, string altro) { _name = name; _altro = altro; } } class Derivata : Base { public Derivata(string name, string param) : base(name, Derivata.creaAltro(param)) { } private static string creaAltro(string param) { ... return "qualcosa da mettere in altro"; }

Grazie!

darisole Profilo | Junior Member

Io avrei usato appunto un metodo statico. Non mi sembra ci siano altri modi (a patto che le classi siano ben strutturate).

RedStripe Profilo | Newbie

francamente non mi viene in mente altro se non
calcolare il parametro dalla classe base direttamente
e poi creare la classe derivata con il costruttore bello pulito..
mi sembra che questo parametro ci stia un pò a forza nella classe derivata.
è solo un parere....

puma.net Profilo | Newbie

Si, potrei creare un costruttore specifico, in realtà il mio scopo era proprio di separare la logica del programma dalle definizioni delle classi in modo che queste possano essere riutilizzate. Derivando la classe includo la logica specifica del programma alla struttura della classe. Cmq grazie!
P.s. Non vi sembra però un pò stupido usare questo giro di codice? Tipo in Java il costruttore della classe base viene chiamato nel corpo del costruttore quando si ritiene più opportuno, in c++ invece si scrive il codice inline, essendo una via di mezzo tra i due linguaggi non hanno scelto nè una nè l'altra strategia. Curioso
Ciao e grazie!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5