Visualizzazione dei risultati da 1 a 10 su 21

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    Ora usiamo i delegate e le lambda?
    No, grazie, hai ragione tu: mai usare i generics se proprio non sono necessari.
    Certo che avremmo risolto subito il problema se i costruttori di FaceT e FaceH non fossero offuscati dal costruttore di Face.... mi risulta che gli overrides non valgono per i costruttori, ma non c'è qualche condono? E se scrivessi Face come classe astratta? Non so sto dicendo cose turpi non conosco ancora a fondo le leggi di Mendel della programmazione OP. Cosa si può fare continuando sulla linea dell'eredità da Face senza far intervenire delegate e IList?


    P.S. Ti ringrazio di aver risposto tu a Renegade: io con ho capito un tubo di quello che ha scritto.

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Quote Originariamente inviata da escocat Visualizza il messaggio
    Ora usiamo i delegate e le lambda?
    No, grazie, hai ragione tu: mai usare i generics se proprio non sono necessari.
    Certo che avremmo risolto subito il problema se i costruttori di FaceT e FaceH non fossero offuscati dal costruttore di Face.... mi risulta che gli overrides non valgono per i costruttori, ma non c'è qualche condono? E se scrivessi Face come classe astratta? Non so sto dicendo cose turpi non conosco ancora a fondo le leggi di Mendel della programmazione OP. Cosa si può fare continuando sulla linea dell'eredità da Face senza far intervenire delegate e IList?


    P.S. Ti ringrazio di aver risposto tu a Renegade: io con ho capito un tubo di quello che ha scritto.
    Non ho capito, il discorso dei costruttori offuscati... che intendi? quando vengono "offuscati" dalla base?

    codice:
    Face f = new FaceH();
    var totale = f.nodes.Sum();//totale 16, ovvero è stato chiamato il costruttore corretto...

  3. #3
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    No, intendevo che se Face ha un costruttore e

    FaceT : Face

    ne ha un altro, quando istanzio FaceT non costruisce new FaceT() ma new Face()!

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Quote Originariamente inviata da escocat Visualizza il messaggio
    No, intendevo che se Face ha un costruttore e

    FaceT : Face

    ne ha un altro, quando istanzio FaceT non costruisce new FaceT() ma new Face()!
    Purtroppo ti devo contraddire... quando crei un istanza di una classe derivata, prima viene chiamato il costruttore della classe base, poi quello della classe derivata. Se invece il tuo problema è fare in modo che non venga eseguito il codice del costruttore di base (in questo caso c'è già un problema di logica probabilmente) allora potresti ad esempio fare così :

    codice:
    public class FaceT : Face
        {
            public FaceT()
                : base(false)
            {
                Console.WriteLine("in FaceT");
                nodes = new int[4];
                nodes[0] = 0;
                nodes[1] = 2;
                nodes[2] = 4;
                nodes[3] = 6;
            }
        }
    
    
        public class FaceH : Face
        {
            public FaceH()
                : base(false)
            {
                Console.WriteLine("in FaceH");
                nodes = new int[4];
                nodes[0] = 1;
                nodes[1] = 3;
                nodes[2] = 5;
                nodes[3] = 7;
            }
        }
        
        public class Face
        {
            public Face(bool generaArray=true) 
            {
                if (generaArray)
                {
                    Console.WriteLine("in Face");
                    nodes = new int[8];
                    nodes[0] = 1;
                    nodes[1] = 3;
                    nodes[2] = 5;
                    nodes[3] = 7;
                    nodes[4] = 0;
                    nodes[5] = 2;
                    nodes[6] = 4;
                    nodes[7] = 6;
                }
            }
            public int[] nodes { get; set; }
        }
    in pratica aggiungo un parametro bool al costruttore della base, che di default è a true (quindi funziona come costruttore senza parametri, ma con il valore true per eseguire il codice, in questo modo quando chiami new Face() il codice è eseguito automaticamente), ed in base al valore di quest'ultimo eseguo o no il codice del costruttore, in questo modo quando viene chiamato il costruttore senza parametri delle classi derivate, passo il parametro false alla classe base, così non sarà eseguito il codice dentro l'if.

    ora se fai :
    codice:
    var face = new Face()//ottieni 8 int (pari e dispari)
    var faceT = new FaceT()//ottieni 4 int (pari)
    var faceH = new FaceH()//ottieni 4 int (dispari)
    ovviamente in ogni caso otterresti lo stesso risultato (sia con false che con true passato alla base) in quanto il costruttore della derivata riscrive l'array, ma era solo per farti capire il meccanismo.
    Ultima modifica di U235; 12-01-2014 a 21:27

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.