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

    [VB] Ridefinire System.Exception

    Ciao a tutti, premetto che sono un neofita di VB (è solo da 2 settimane che ci smanetto sopra). Vorrei chiedere un consiglio riguardo a questo mio problema.

    Ho una applicazione composta da molte form.
    E' mia necessita gestire le eccezioni di sistema, in modo che queste vengano scritte su un db ed all'utente compaia solo un messaggio di errore generico.

    Ovviamente la tal cosa è fattibile (ed ho già iniziato a farla) tramite inserimento, nei metodi significativi, del blocco
    try
    catch ex as exception
    --- scrivi su DB
    --- scrivi "Errore generico. Leggere i log"
    end try

    Ora, pero' devo mettere mani a tutte le form ed aggiungere il codice di cui sopra.

    Non c'è un metodo per dirgli "tutte le volte che becchi un eccezione fai così o cosà"?
    Io pensavo nella possibilità di ridefinire la classe System.Exception, ma avevo 2 perplessità:
    1) come fare? creare una classe intermedia SystemExceptionManuale, gestire l'eccezione lì e farla ereditare da tutte le form? sarebbe fattibile?
    2) nel qual caso volessi gestire un eccezione che non segue lo standard di scrittura su db, ma viene solamente scritta a video che dovrei fare? blocco try catch su quell'evento e mi mangerei l'errore?

    Probabilmente ho scritto un sacco di baggianate, ma se qualcuno vuol darmi una mano o spiegarmi meglio, ringrazio anticipatamente.

    ciao

  2. #2
    Ridefinire exception non lo puoi fare. Quello che puoi fare, quando scrivi una classe tua è lanciare errori personalizzati ai chiamanti delle tue funzioni.

    Se classe A chiama un metodo di classe B, questo metodo potrebbe andare in errore e lanciare un eccezione personalizzata ad A, ad esempio B.MyCustomizedExceptoin (che ovviamente eredita da Exception).
    A quindi, dal canto suo, può fare 2 cose: catturare l'eccezione specifica oppure catturare quella generale (System.Exception)

    try
    catch ex as B.MyCustomizedExceptoin
    'gestisco quella customizzata
    catch ex as exception
    ' gestisco quelle generiche


    Se levo catch ex as B.MyCustomizedExceptoin
    un eccezione che dovesse arrivare di tipo B.MyCustomizedExceptoin verrà gestita comunque come eccezione generica perchè come padre ha System.Exception


    Questo però ti permette solo di gestire eccezioni della classe B, se ho capito bene, te vuoi invece gestire errori che potrebbero essere avvenuti un po' ovunque. In questo caso ti consiglio di lasciar perdere la creazione di un'eccezione custom e crearti un bel metodo statico (shared) che ricihami ad ogni eccezione dove vuoi scrivere su DB

    //in una classe di Utility, ovvero inclusa e visibile da tutte le classi del progetto:
    public shared sub SrciviEccezioneSuDb(byval ex as exception)
    'scrivi su db

    e poi la richiami dal blocco di gestione dell'eccezione

    try
    catch ex as exception
    -----MyUtilClass.SrciviEccezioneSuDb(ex)
    -----messaggio all'utente

  3. #3
    la seconda è quella che ho fatto, anche se mi rimane il fatto di dover fare una try catch in ogni blocco critico.
    Ed è quello che volevo eliminare....

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.