Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 31
  1. #11
    Originariamente inviato da alka
    A questo punto, è un dato di fatto che il tipo di dato è determinabile solo a runtime perchè dipende dal parametro passato, quindi non puoi chiedere al compilatore C# di accettare codice che fa un uso esplicito del valore di ritorno come se fosse un Hashtable quando non è detto che l'oggetto restituito appartenga a questo tipo.
    ok, l'ultima domanda ... fin qui ci siamo capiti, runtime in C# non può essere dinamico, ecco perchè non esiste una eval ... ma almeno che possa reindirizzare l'overload vero e proprio ... nel senso:

    è possibile specificare un parametro come istanza di e non come tipo di in ingresso a funzione ?


    codice:
    public bool pippo(object pluto:bool){ return System.Convert.ToBool(pluto); }

    dove pluto è si un object, ma è un istanza di un booleano ?
    questo mi permetterebbe di fare un overload di funzione a seconda del tipo di istanza e non del tipo di dato ... ma probabilmente stò delirando
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #12
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,487
    Originariamente inviato da andr3a
    è possibile specificare un parametro come istanza di e non come tipo di in ingresso a funzione?
    Se la tua funzione restituisce istanze specifiche di classi diverse ma queste sono disponibili in numero limitato, potresti usare un parametro che abbia il tipo specifico e restituire l'istanza creata all'interno di tale parametro.

    E' ovvio che, anche in questo caso, non dovrai ricadere in situazioni ambigue, ma può essere una soluzione.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #13
    Originariamente inviato da alka
    potresti usare un parametro che abbia il tipo specifico e restituire l'istanza creata all'interno di tale parametro.
    io mi son mosso per hashtable ... ma pare non vada bene lostesso, queste castano per i fatti loro in object e per riprendere un valore devo ricastare nuovamente ... comincio ad innervosirmi ... cmq tutto va bene purchè mi faccia un pò le ossa con stò linguaggio


    codice:
    System.Collections.Hashtable types = new Hashtable();
    int i = 1;
    types["asd"] = i;
    int z = types["asd"];
    errore zio pera ...
    int z = (int)types["asd"];
    tutto ok ... ma non devo castare ... stò sclerando ... vabbeh, proverò unsafe oppure il tuo metodo, se solo l'avessi capito
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #14

    tanti bei discorsi ... ma poi ....

    mi accorgo di questo ...


    codice:
    public object htable() {
            return 10;
    }
    Hashtable test = new Hashtable();
    test[htable()] = "questo si ...";
    Response.Write(test[10]);

    ora, di fatto sono ore che ce l'ho sotto gli occhi ... ma tutti i bei discorsi sul tipo che non si casta in automatico, che fine hanno fatto ???

    chi mi spiega perchè un indice Hashtable prende un oggetto e lo gestisce come dato di tipo intero, in queto caso (o stringa, sarebbe uguale) mentre diventa impossibile fare una cosa tipo questa ?

    int z = htable();

    è l'ultima volta che rompo, sul serio, ma questa vorrei capirla per bene ... grazie



    [edit]
    public object __htindex(char mode) {
    object result;
    switch (mode) {
    case 'a':
    result = new Hashtable();
    break;
    case 'i':
    result = 123;
    break;
    case 'd':
    result = 1.23;
    break;
    case 'b':
    result = true;
    break;
    case 's':
    result = "string";
    break;
    case 'c':
    result = 'c';
    break;
    default:
    result = new Object();
    break;
    }
    return result;
    }
    Hashtable test = new Hashtable();
    object obj = new Object();
    test[__htindex('i')] = "int";
    test[__htindex('d')] = "double";
    test[__htindex('b')] = "bool";
    test[__htindex('s')] = "string";
    test[__htindex('c')] = "char";
    test[__htindex('a')] = "Array";
    test[__htindex('O')] = "Object";
    Response.Write(test[123] + "
    ");
    Response.Write(test[1.23] + "
    ");
    Response.Write(test[true] + "
    ");
    Response.Write(test["string"] + "
    ");
    Response.Write(test['c'] + "
    ");
    Response.Write(test[test] + "
    ");
    Response.Write(test[obj] + "
    ");


    funziona quasi tutto (tutto tranne i valori di Hashtable ed Object)


    //Output
    int
    double
    bool
    string
    char


    forse la risposta è che in Hashtable le chiavi sono object e ilparagone viene fatto su objects e non sul tipo originario ?

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #15
    xche viene richiamato il metodo ToString dell'oggetto, e non del tuo tipo base, e quindi ne viene stampato il contenuto ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  6. #16
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,487
    Originariamente inviato da andr3a
    mi accorgo di questo... [...]
    Onestamente, io sono convinto che tu abbia un po' di confusione in merito al funzionamento della programmazione ad oggetti e soprattutto del linguaggio C#, in particolare sull'operazione di casting, dato che nel codice che hai postato ti stupisci di poter usare come Hashtable una variabile che è di tipo Hashtable.

    Non riesco a comprendere quali sono i tuoi problemi perché li esprimi nei termini di come questi dovrebbero essere realizzati attraverso il codice, ma con concetti "sballati" riguardo al funzionamento dello stesso.

    Non è che il tuo problema finale ricade solamente nel fatto che non fai il "boxing" di una variabile intera, che è un tipo primitivo ed è un "Value type", per usarlo come chiave nella Hashtable?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #17
    Originariamente inviato da alka
    Onestamente, io sono convinto che tu abbia un po' di confusione in merito al funzionamento della programmazione ad oggetti e soprattutto del linguaggio C#
    soprattutto la seconda ... ma in generale, sono abituato "molto male"
    [ con JScript.NET non avrei avuto problemi per il mio problema ... ad esempio, compilazione runtime e pace ]
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #18
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,487
    Originariamente inviato da andr3a
    con JScript.NET non avrei avuto problemi per il mio problema ... ad esempio, compilazione runtime e pace
    Ne siamo sicuri? Mi spiego: quanto espresso in questa discussione non è una limitazione o una prerogativa di C#, ma la naturale applicazione dei principi della OOP, e pertanto dovrebbero valere per qualsiasi linguaggio di programmazione che supporti questo paradigma.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #19
    Originariamente inviato da andr3a
    soprattutto la seconda ... ma in generale, sono abituato "molto male"
    [ con JScript.NET non avrei avuto problemi per il mio problema ... ad esempio, compilazione runtime e pace ]
    come ti ho detto anche su gtalk ... anche con C# puoi compilare a run-time

    ma è qualcosa di assolutamente insensato perché quello che vuoi fare tu non serve

    eseguire un typecasting per poter usare un'oggetto è "normale" e "naturale" per un programmatore che usa la OOP ... il problema è la logica con la quale hai strutturato tutto ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #20
    Originariamente inviato da alka
    Ne siamo sicuri?
    si, mi bastava un' eval e mi son già documentato a riguardo.


    Originariamente inviato da alka
    Mi spiego: quanto espresso in questa discussione non è una limitazione o una prerogativa di C#, ma la naturale applicazione dei principi della OOP, e pertanto dovrebbero valere per qualsiasi linguaggio di programmazione che supporti questo paradigma.
    ripeto, sono abituato male ... in alcuni linguaggi (più scripting che altro, ovvio, ma anche con strict type) il casting è automatico all'istanza del tipo di dato.

    Object a = new Int32();
    a = 3;
    int b = a + 2; // 5

    come il casting è implicito quando faccio un return object da un int (questo lo giustificate) non tollerate che sia implicito da tipo di istanza is Int32 a int32, cosa che non tutti i linguaggi fanno.

    Inoltre con daniele abbiamo già detto (io ho già detto) che in C se ho un array di interi e mi prendo *valore[2] sapendo che è un intero non devo castare una fava:

    int a = *valore[2];
    e non
    int a = (int)*valore[2];

    Quindi in C#, non conoscendolo, non trovo apparentemente normale che in una Hashtable mi salvo un int che una volta ripreso non è più un int ma un casting implicito ad object.
    (ho visto che ci sono Collections per riferimento, forse queste potrebbero risolvere anche questa cosa ... mi stò documentando, stò imparando)

    Ora che lo so, fine dei problemi, doppio casting, 1 implicito e l'altro esplicito, e pace, ma non sapendo che Hashtable si comportava così non puoi venirmi a dire che sono io ad avere confusione sulla OOP, non lo sapevo, punto.

    Quello che spacci per normale e naturale in tutti i linguaggi per me non lo è ... anzi, stando al C# il casting implicito di un float a int non dovrebbe esistere ... invece c'è (come è normale che sia), io lo reputo un comportamento insolito per quello che so e per quel che conosco, ma se vogliamo dire che sono io quello impreparato, beh, il primo giorno in C# qualche dubbio o qualche curiosità credo ce la siamo tolto tutti, o no ???

    Cmq spero che in questa parte di forum non ci sia la regola: se chiedi sei un incompetente, smetterei subito di postare (anche se in C# sono di fatto incompetente)
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.