Soluzione alternativa per nessun metodo nello spazio dei nomi in C #

2

Sono nuovo in C # e ho difficoltà con la struttura del codice. La mia applicazione ha:

  1. GUI con pulsante Show my Ethernet IP . Quando l'utente fa clic su questo pulsante, viene visualizzato l'indirizzo IP del PC.

  2. Classe ModbusTCPSlaveMachine . All'interno di questa classe creo TCPListenter e lo fornisco con l'indirizzo IP Ethernet del PC.

In entrambi i casi ottengo l'indirizzo IP locale usando lo stesso metodo GetAllLocalIPv4 . In questo momento ho 2 copie di questo metodo nel codice (nelle classi Form e ModbusTCPSlaveMachine ) che non è buono, immagino. Ad esempio, in Python avrei semplicemente posto il metodo in qualche modulo di utilità. Sono consapevole che i metodi non possono essere localizzati direttamente nello spazio dei nomi in C # mentre non capisco il perché.

L'opzione che posso pensare è di posizionare questa funzione in una classe separata - qualche classe di utilità contenente un singolo metodo (basato sull'esperienza Python). Non sono sicuro che questa sia una soluzione ragionevole in C # perché questa classe di utilità sembra un contenitore privo di significato per me.

Come posso / devo risolvere il problema?

    
posta Poolka 28.11.2018 - 15:19
fonte

3 risposte

7

Utilizzare semplicemente un metodo statico è la strada da percorrere qui. Se la tua funzione "appartiene" ad alcune classi esistenti puoi dichiararle come metodo public static lì. Se deve essere separato, puoi inserire il metodo in static class . Una classe statica C # non ha costruttore e non può essere istanziata, ed è quindi adatta come spazio dei nomi per le funzioni.

Come esempio nella libreria standard, prendi in considerazione la classe Math .

    
risposta data 28.11.2018 - 16:18
fonte
3

L'inserimento di un metodo in una classe normale ha questi vantaggi:

  1. Puoi mettere metodi correlati nella stessa classe e possono essere spostati insieme.

  2. È possibile inizializzare lo stato dell'oggetto in un momento precedente, quindi quando viene chiamato il metodo. Questo ti offre gli stessi vantaggi di una chiusura.

  3. Puoi sovrascrivere il metodo con un metodo diverso senza modificare i client che lo utilizzano.

Se nessuna di queste cose ti sarà mai piaciuta, la statica ti farà risparmiare la digitazione della tastiera.

    
risposta data 28.11.2018 - 18:43
fonte
1

Sei sicuro di non voler inserire questa funzione come normale membro nella propria classe, magari chiamata NetworkInfo ? Quindi si può prendere in giro nei casi di test e avere risultati prevedibili che non dipendono dalla macchina su cui è in esecuzione il codice.

    
risposta data 29.11.2018 - 10:56
fonte

Leggi altre domande sui tag