PDA

View Full Version : [c#] differenza tra due cast???


vittorio130881
02-08-2010, 17:42
che differenza c'è tra questi due cast?

Derived d = new Derived();
Base b = d;

dove derived deriva da base

DerivedClass B = new DerivedClass();
BaseClass A = (BaseClass)B;


per caso la differenza è che il primo rimane una istanza di derived e l'altro diventa una istanza di baseclass'??

Kralizek
02-08-2010, 17:50
i due casi sono equivalenti :)

l'oggetto mantiene le sue proprietà. semplicemente viene visto come se fosse un oggetto di classe base.

nuovoUtente86
02-08-2010, 18:33
semplicemente nel primo caso l' upcasting è implicito (coercion), nel secondo è esplicitato.

vittorio130881
02-08-2010, 18:37
quindi in entrambi i casi l'istanza è sempre DERIVED ma puntata come classe base giusto?

ma se volessi trasformare proprio l'istanza in una istanza di base come potrei fare?

nuovoUtente86
02-08-2010, 18:51
Approfondisci gli aspetti legati al polimorfismo e al binding dinamico.

vittorio130881
03-08-2010, 15:57
basta creare un metodo che copi i valori da una istanza all'altra!
se mi rispondevi cosi era meglio!!!!
grazie cmq!!!!

astorcas
03-08-2010, 20:27
basta creare un metodo che copi i valori da una istanza all'altra!
se mi rispondevi cosi era meglio!!!!
grazie cmq!!!!

non avrebbe potuto risponderti così perché quello che hai detto non ha molto senso :asd:

vittorio130881
03-08-2010, 21:38
tu dici??
è scritto su guida allo sviluppatore c# della wrox......
a meno che tu non abbia inventato un tuo modo di programmare chiamato astorcas# il tuo parere è alquanto inutile ;) :D

DanieleC88
03-08-2010, 21:45
tu dici??
è scritto su guida allo sviluppatore c# della wrox......
a meno che tu non abbia inventato un tuo modo di programmare chiamato astorcas# il tuo parere è alquanto inutile ;) :D

Mio dio, il livello di questo forum sta crollando a vista d'occhio, e in maniera inversamente proporzionale sta salendo la spocchiosità... :asd:

Comunque la risposta ha molto più senso di quanto pensi: ogni istanza di una classe B derivata da una classe A... è (is-a) a tutti gli effetti un oggetto anche della classe A, in quanto ne conserva tutte le proprietà e i metodi. Perché quindi sprecarsi a creare un metodo che ricopi tutto?

vittorio130881
03-08-2010, 23:22
ogni istanza di una classe B derivata da una classe A... è (is-a) a tutti gli effetti un oggetto anche della classe A, in quanto ne conserva tutte le proprietà e i metodi. Perché quindi sprecarsi a creare un metodo che ricopi tutto?



ma che ti rispondo a fare se non hai capito nemmeno quello che volevo sapere......lasciamo perdere.....:stordita:

DanieleC88
03-08-2010, 23:42
Ottima domanda: che mi hai risposto a fare? :mbe:

Ho capito ciò che chiedevi, il punto è che ciò che chiedevi è sostanzialmente inutile.

Albi89
04-08-2010, 00:18
Mio dio, il livello di questo forum sta crollando a vista d'occhio, e in maniera inversamente proporzionale sta salendo la spocchiosità... :asd:

Allora non era solo una mia sensazione... (anche se mancavo da un po') :D
Pensavo fosse solo dovuto al periodo di esami universitari :ciapet:

Per fortuna di gente gradevole da leggere ce n'è sempre (tu tra i primi) ;)

Per vittorio... inutile che rincari la dose, tralasciando l'arroganza, non so di che guida al C# parli, ma quella che suggerisce è una pratica che in ambito OOP non ha alcun senso.
D'altra parte, di libri che propongono pratiche orride ne ho un paio anche io in libreria, pensa che il Deitel propone anche il sacrificio umano ;)

DanieleC88
04-08-2010, 00:42
Per fortuna di gente gradevole da leggere ce n'è sempre (tu tra i primi) ;)
Oh, andiamo, così mi commuovo! :flower:

[...] pensa che il Deitel propone anche il sacrificio umano ;)
:eekk:
Ma che davvero? :D

ciao ;)

vittorio130881
04-08-2010, 08:45
Deitel propone anche il sacrificio umano

ammazza che universita fai???? interessante!!!!! sara sicuro Scienze dell'Informazione :):):):):):)
sei un genio allora!!!!!!! scherzo ;)

quello che chiedo io non sarà pratica ma sicuramente teoria.
fare il cast esplicito tra due classi derivate si può fare e volevo solo sapere quello.
continua a studiare il deitel io mi prendo il wrox sicuramente piu interessante e scritto da gente mooooooooooolto piu brava e intelligente :)

cionci
04-08-2010, 11:00
vittorio130881: ti consiglio di darti una regolata. Non si partecipa in questo modo in questo forum.

Fare un cast, implicito o esplicito, ad una classe base è sempre permesso. Senza alcun metodo che si occupa di copiare i dati membro a membro.
Un'istanza di una classe derivata contiene sempre un'istanza della classe base.
Ovviamente dovrai tenere conto anche dei metodi virtuali dei quali è stato fatto l'override.

vittorio130881
04-08-2010, 12:05
a me sembra di essere stato attaccato....per una domanda....
poi fate voi.......cmq l'unico che mi ha risposto tranquillamente è stato come al solito kralizek...... gli aliri puoi leggere da te.....

cionci
04-08-2010, 12:09
astorcas ha solo corretto la tua affermazione.
Mi sembra che sia stato tu dopo a perdere il "controllo"...

Albi89
04-08-2010, 12:10
Deitel propone anche il sacrificio umano

ammazza che universita fai???? interessante!!!!! sara sicuro Scienze dell'Informazione :):):):):):)
sei un genio allora!!!!!!! scherzo ;)

quello che chiedo io non sarà pratica ma sicuramente teoria.
fare il cast esplicito tra due classi derivate si può fare e volevo solo sapere quello.
continua a studiare il deitel io mi prendo il wrox sicuramente piu interessante e scritto da gente mooooooooooolto piu brava e intelligente :)

Piano piano... stavo solo cercando di sdrammatizzare ;)
Puoi scrivere il metodo che desideri, senza che questo ti inserisca tra i candidati per i sacrifici umani di cui sopra.
Oltre però ad aver fatto uno sforzo inutile, perché questo meccanismo è già gestito dal linguaggio, è anche pessimo stile: il senso di utilizzare gerarchie di classi è quello di poter sostituire (http://en.wikipedia.org/wiki/Liskov_substitution_principle) (anche se spesso ad un livello meno stretto di quello qui esposto formalmente) in ogni momento una classe derivata ad una base, dove la base è richiesta. Se ti occupi tu delle conversioni, direi che ignori uno dei punti centrali dell'OOP (tralasciando che in situazioni pratiche non saresti neanche in grado di applicare questa tecnica, a meno di determinare a run time il tipo, ma... dove ci siamo impelagati? siamo seri?!).

Rispondo rapidamente all'altra carrellata di domande: no, non studio scienze dell'informazione, ma credo che giudicare una persona dalla facoltà che frequenta sia un po' kitsch (comunque studio ingegneria); il Deitel l'ho buttato in mezzo tanto per nominare un libro che non mi piace, e non mi interessa di sapere se chi l'ha scritto è più o meno furbo di chi ha scritto il tuo.

P.S. ma sei davvero dell'81? Su, su, dai il buon esempio e smettila di dare addosso a ragazzi che potrebbero essere i tuoi figlioletti ;)

vittorio130881
04-08-2010, 13:17
ma chi ha dato su a nessuno!!!!
se ho offeso astorcas, e gli chiedo scusa, questo non vuol dire che gli altri mi debbano dare addosso!!!!
cmq chiedo scusa per i toni usati!
si aimè so vecchiotto oramai però al c# ci si può avvicinare a qualsiasi eta no? :)

Albi89
04-08-2010, 13:29
ma chi ha dato su a nessuno!!!!
se ho offeso astorcas, e gli chiedo scusa, questo non vuol dire che gli altri mi debbano dare addosso!!!!
cmq chiedo scusa per i toni usati!
si aimè so vecchiotto oramai però al c# ci si può avvicinare a qualsiasi eta no? :)

Sure :p

DanieleC88
04-08-2010, 13:41
a me sembra di essere stato attaccato....per una domanda....

Ma dove, di grazia, ti avrei attaccato? :)
Glissiamo sul resto, che non ne vale la pena.

ciao ;)

Kenger
04-08-2010, 14:48
ammazza che universita fai???? interessante!!!!! sara sicuro Scienze dell'Informazione :):):):):):)
sei un genio allora!!!!!!! scherzo ;)


Scommetto che intendevi scienze della comunicazione, vero? :D

Albi89
04-08-2010, 15:17
Su, su, releghiamo le polemiche alla pagina 1 e facciamo i carini in pagina 2 :sofico:

astorcas
04-08-2010, 15:42
ma chi ha dato su a nessuno!!!!
se ho offeso astorcas, e gli chiedo scusa, questo non vuol dire che gli altri mi debbano dare addosso!!!!
cmq chiedo scusa per i toni usati!
si aimè so vecchiotto oramai però al c# ci si può avvicinare a qualsiasi eta no? :)

tranquillo nessuna offesa, e soprattutto nessuna intenzione di offendere e/o attaccare qualcuno... :mano:

vittorio130881
04-08-2010, 16:00
Scommetto che intendevi scienze della comunicazione, vero? :D



no no intendevo proprio quello!!!!!! se sapeva il cast tra classe base e derivata almeno dell'informazione doveva essere!!!!! ;);););););)
comunicazione sarebbe stato svilente per lui :)
RIPETO SCHERZO!
infatti fa ingegneria no????????'
hahahahahahahaah

DanieleC88
04-08-2010, 16:02
Ho paura. :ops:

fero86
04-08-2010, 19:53
@vittorio130881: sto lurkando la discussione e mi interesserebbe molto conoscere la tua risposta a questo post:
Ma dove, di grazia, ti avrei attaccato? :)
[...] :)


per il resto vorrei chiederti un favore: usa la punteggiatura e le emoticon con meno entusiasmo perché effettivamente fai spavento :asd: (vedi post #26)

Kralizek
08-08-2010, 10:36
uno torna scottato da una settimana a Capri (mi sono scottato finanche dietro le ginocchia :sofico: ) e trova 'sto putiferio... forza ragazzi... meno flame é piú codice!

cionci
09-08-2010, 09:35
@vittorio130881: sto lurkando la discussione e mi interesserebbe molto conoscere la tua risposta a questo post:
:)
C'è stato un richiamo, una risposta a questo quesito potrebbe solo riaccendere la discussione. Vediamo quindi di chiudere la questione.

vittorio130881
09-08-2010, 10:43
ho anche chiesto scusa a tutti in pvt e non!