Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [c#] Ereditarietà multipla

    Ciao Ragazzi, ho il seg. problema.

    Voglio creare una classe chiamiamola "prima"
    La quale estenda un'altra classe chiamiamola "seconda"

    E questo è facile :

    codice:
    public class Prima : Seconda

    Ed eccoci al problema adesso voglio estendere ulteriormente il tutto ad un'altra classe per esempio TextBox
    Ho provato a fare :

    codice:
    public class Prima : Seconda : TextBox
    Ma ovviamente non è corretto.


    Qualcuno di voi ha mai avuto il seg. problema? :master: Mi potreste aiutare?
    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Interfacce o composizione

    In C# non esiste l'ereditarietà multipla (e forse è meglio così, secondo me).

    Gestire un'ereditarietà multipla non è così facile come credi.

    Inoltre, i casi in cui un'ereditarietà multipla è davvero necessaria o indispensabile sono pochissimi.

    Spesso, basta utilizzare le interfacce per ottenere l'effetto desiderato, oppure è possibile agire per composizione, cioè creando all'interno della propria classe "B" che discende da una classe "A" un'istanza della classe "C" per usarne le funzionalità, senza però fornire la sua interfaccia all'esterno.

    Agire per composizione è molto semplice e immediato, mentre l'uso delle interfacce è un po' più complesso, ma non di tanto.

    Sostanzialmente, si tratta di creare classi puramente astratte, che contengono metodi (non implementati); tali classi, dette interfacce (come indica la parola chiave interface) fungono semplicemente da "scheletro" per le classi che le implementano.

    Concludendo, puoi dichiarare un'interfaccia che contenga i metodi necessari a svolgere una determinata funzionalità e creare classi discendenti partendo da una qualsiasi classe base che implementino tale interfaccia.

    Il vantaggio più grande è il seguente: ovunque sia richiesto il riferimento ad un'interfaccia, è possibile passare un'istanza di qualsiasi classe che, indipendentemente dalla classe base da cui deriva, implementi tale interfaccia.

    Il Data Binding è stato implementato in questo modo: un'interfaccia definisce i metodi di cui dispone (leggi "deve disporre obbligatoriamente") qualsiasi classe che intendde supportare tale meccanismo di associazione ad un'origine dati.

    Spero di averti dato indicazioni utili.

    Prima di addentrarti nella creazione di interfacce, documentati bene a riguardo poichè la loro trattazione non si può esaurire in un semplice messaggio su questo forum.

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

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

  3. #3

    Interface no Grazie

    Conosco abbastanza bene le interfacce ed il loro funzionamento, ma non credo che posssano aiutarmi.
    Ti definisco il problema così è più facile trovare la soluzione :

    Ho creato una classe Connect, la quale ha all'interno dei metodi per collegarsi ad un server , disconnettersi da esso, e tante altre funzionalità.

    A questo punto vorrei che un'altro programmatore creasse un Button fornendogli tutti i metodi della mia classe.
    Che ad esempio al click del mouse invocasse il metodo connetti() della mia classe.



    Per far ciò l'altro programmatore dovrebbe creare uno UserControl ed estenderlo a Button.


    Una possibile soluzione , "ma è l'ultimacosa che vorrei usare", è creare un'istanza della mia classe , ed al click del button invocare il metodo sulla mia istanza.
    Ciauz

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da Dylan_Web
    Ho creato una classe Connect, la quale ha all'interno dei metodi per collegarsi ad un server , disconnettersi da esso, e tante altre funzionalità.
    Ok, fino a qui ci sono.

    Originariamente inviato da Dylan_Web
    A questo punto vorrei che un'altro programmatore creasse un Button fornendogli tutti i metodi della mia classe.
    Che ad esempio al click del mouse invocasse il metodo connetti() della mia classe.
    In tal caso, se non vuoi che il programmatore si occupi del lavoro sporco richiamando egli stesso il metodo della tua classe, puoi creare tu una classe Button che esegua questo codice al momento del clic; il programmatore può derivare dalla tua classe per ottenere queste funzionalità a cui può aggiungerne altre.

    Originariamente inviato da Dylan_Web
    Per far ciò l'altro programmatore dovrebbe creare uno UserControl ed estenderlo a Button.
    Se non è lui a farlo, devi farlo tu usando interfacce e classi; se pure esistesse l'ereditarietà multipla, dovresti comunque codificare tu le classi di controlli che richiamano il codice di Connect se desideri che il programmatore crei semplicemente una classe discendente e abbia già tutte le funzionalità senza aggiungere un'ulteriore riga di codice.

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

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

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 © 2025 vBulletin Solutions, Inc. All rights reserved.