93 messaggi dal 22 marzo 2012
Buongiorno Lista

Premetto che quello che sto implementando e' la prima volta che lo faccio.

Ho creato un progetto (GENERALE) con una classe PRIMARIA con all'interno due funzioni come da esempio sotto

namespace GENERALE
{
    public class PRIMARIA
    {
        public int SOMMA(int PRIMO, int SECONDO)
        {
            return PRIMO + SECONDO;
        }
    }
}


Dopo ho creato una secondo progetto (DERIVATA) con una classe SECONDARIA che incorpora la PRIMARIA

using GENERALE;

namespace DERIVATA
{
    public class SECONDARIA : PRIMARIA
    {
        public int SOTTRAZIONE(int PRIMO, int SECONDO)
        {
            return PRIMO - SECONDO;
        }
    }
}


Il mio problema e' quando io da una procedura WPF C# richiamando la classe SECONDARIA (che richiamo come da codice sotto)

using System;
using System.Windows;
using DERIVATA;

namespace TEST
{

    /// <summary>
    /// Logica di interazione per MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        SECONDARIA ZZ = new SECONDARIA();

        public MainWindow()
        {
            InitializeComponent();

            int primo = 15;
            int secondo = 10;

            Console.WriteLine(ZZ.SOTTRAZIONE(primo, secondo));
            //Console.WriteLine(ZZ.)
        }
    }
}


mi trova SOTTRAZIONE (dichiarata nella classe SECONDARIA con namespace DERIVATA) ma non mi trova SOMMA (dichiarata nella classe PRIMARIA con namespace GENERALE).

Il sitema mi dice che per utilizzare la function SOMMA (PRIMARIA nspace GENERALE) devo inserire il riferimento a GENERALE

Non capisco perche' avendo gia' instanziato il riferimento a GENERALE nella classe SECONDARIA questo non lo porta con se.

Sperando di essere stato chiaro (e ne dubito visto che sto imparando a fare quanto sopra :) ) qualcuno può darmi un aiuto a capire correggendo il mio codice o dandomi del codice di esempio per effettuare prove in modo da poter capire per le prossime volte.

Ringraziandovi per la pazienza invio cordiali saluti

Perini Luca
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Luca,


Non capisco perche' avendo gia' instanziato il riferimento a GENERALE nella classe SECONDARIA questo non lo porta con se.

Quando il progetto DERIVATA viene compilato, in esso non vi è nessuna traccia del metodo SOMMA, che invece è definito nella classe PRIMARIA del progetto GENERALE.
L'ereditarietà non implica che tutta la logica di PRIMARIA venga "inglobata" o "copiata" in SECONDARIA. Semplicemente, ciascuna definizione resta nel proprio progetto e viene compilata nei rispettivi assembly.

Per cui, quando dal progetto TEST vuoi usare la classe SECONDARIA, devi aggiungere il riferimento sia al progetto DERIVATA che GENERALE, così che il compilatore abbia la situazione delle dipendenze ben chiara quando si troverà a compilare il progetto TEST.

Se la domanda era: "perché devo aggiungere io esplicitamente il riferimento al progetto GENERALE se tanto il compilatore può arrivarci da solo a capire in che assembly è stata definita la classe PRIMARIA?". A questo non so rispondere, presumo sia stata una deliberata scelta di progettazione da parte di Microsoft. Probabilmente i riferimenti devono essere espliciti perché così nulla viene lasciato all'interpretazione del sistema di build, che quindi si affida unicamente alle disposizioni dello sviluppatore.

Per ipotesi, dal progetto TEST potrei voler referenziare una versione più recente dell'assembly GENERALE rispetto a quella referenziata da DERIVATA, per poter usare direttamente altre funzionalità.

Comunque, se tu da Visual Studio fai CTRL+. sopra la riga ondulata vedrai apparire il suggerimento per aggiungere velocemente il riferimento al progetto GENERALE. Lo vedi in questa immagine:
https://1drv.ms/u/s!Ao4rhSdtDw8rge9ij0-jC97uF3PplA

ciao,
Moreno
Modificato da BrightSoul il 27 agosto 2018 21.06 -

Enjoy learning and just keep making
93 messaggi dal 22 marzo 2012
Ciao Moreno
ti ringrazio per la risposta chiara ed esaustiva.
Avevo visto la possibilita' con il suggerimento ma pensavo, nella convinzione che SECONDARIA si portasse tutto il bagaglio di informazioni, di sbagliare qualcosa io.

Nel ringraziarti nuovamente ti invio cordiali saluti

Perini Luca

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.