Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] Chiarimento sull'utilizzo di classi
Forum - C# / VB.NET - [C#] Chiarimento sull'utilizzo di classi

Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 15:50
Venerdì, 01/04/2011
Ciao a tutti.
Da poco mi sono cimentato con il C# e devo dire che non lo trovo per nulla male. Ho però riscontrato subito un dubbio che riguarda l'uso delle classi.
Ciò che vorrei fare io è questo: creare una classe o più in generale un raggruppamento di funzioni di utilità in modo da poterle utilizzare velocemente sul mio progetto madre.
Riconducendomi al pascal (il primo linguaggio imparato e dunque quello più conosciuto), mi bastava creare una unit con dentro le funzioni che desideravo, poi semplicemente dalla unit principale la richiamavo tramite istruzione uses MyUnit e potevo tranquillamente utilizzare le funzioni in essa contenute.
In C# ho solo trovato classi, i cui metodi possono essere chiamati o inizializzando la classe in un oggetto, es:
Codice sorgente - presumibilmente C# / VB.NET

  1. MyClass myClass = new MyClass();
  2.  
  3. // [...]
  4.  
  5. myClass.MyMethod();



oppure utilizzando i metodi static, ma comunque richiamando la classe creata.

DOMANDA: Esiste per caso qualcosa come il pascal, tale che una volta "importata" la classe io possa usare implicitamente i suoi metodi/funzioni/variabili/costanti senza far riferimento esplicito ad essa?

Grazie in anticipo.


PM Quote
Avatar
Linkinf22 (Normal User)
Rookie


Messaggi: 59
Iscritto: 28/06/2009

Segnala al moderatore
Postato alle 16:08
Venerdì, 01/04/2011
Utilizzando la parola chiave "using" puoi creare un oggetto della classe momentaneo.

Esempio:

Codice sorgente - presumibilmente VB.NET

  1. // Qui l' oggetto myClass non esiste
  2.  
  3. using (MyClass myClass = new MyClass())
  4. {
  5.     // Qui l' oggetto myClass esiste
  6.     // [...]
  7.     myClass.MyMethod();
  8. }
  9.  
  10. // Qui l' oggetto myClass non esiste



Non so se esiste un' altro modo.

Faccio un piccolo edit: Ovviamente il metodo "MyMethod()" facente parte della classe MyClass deve essere pubblico, non privato. Ma credo questo tu lo sappia già, era solo per evitare "incomprensioni".

Ultima modifica effettuata da Linkinf22 il 01/04/2011 alle 16:13
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 16:14
Venerdì, 01/04/2011
Testo quotato

Postato originariamente da a_butta:
DOMANDA: Esiste per caso qualcosa come il pascal, tale che una volta "importata" la classe io possa usare implicitamente i suoi metodi/funzioni/variabili/costanti senza far riferimento esplicito ad essa?




No, ma puoi crearti un tuo assembly (una dll) contenente un namespace delle tue classi "custom" per fare particolari cose. Ogni progetto che crei referenzi quell'assembly e aggiungi la corrispettiva clausola using.

tra le tue classi ci potrebbe essere una classe Utils statica nella quale metti i metodi che ti servono:

Codice sorgente - presumibilmente C++

  1. public static class Utils {
  2.     public static void Metodo1();
  3.     ....
  4. }



considera che puoi anche integrare le classi esistenti del framework con dei tuoi metodi di utility mediante i metodi di estensione: http://msdn.microsoft.com/it-it/library/bb383977.aspx

un esempio stupido è il metodo IsNullOrTrimmedEmpty della classe stringa, questo metodo sarebbe molto utile per verificare se una stringa è nulla o se trimmata (eliminati gli spazi iniziali e finali) è vuota. La classe string di base offre solo il metodo IsNullOrEmpty (http://msdn.microsoft.com/it-it/library/system.string.isnu ...

ma tramite i metodi di estensione puoi fare un magheggio simile:

Codice sorgente - presumibilmente C#

  1. public static class Extensions {
  2.     public static bool IsNullOrTrimmedEmpty(this string str) {
  3.         return str.IsNullOrEmpty() || str.Trim().Length == 0;
  4.     }
  5. }



in questo modo magicamente tutte le istanze di string avranno il metodo IsNullOrTrimmedEmpty:

Codice sorgente - presumibilmente C# / VB.NET

  1. string test = "ciao a tutti";
  2.  
  3. if (test.IsNullOrTrimmedEmpty()) ...



Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:41
Venerdì, 01/04/2011
Mi sembra che strano che non te lo aspettassi da un linguaggio ad oggetti.
Io sono d'accordo con la soluzione di HeDo, ma ti ricordo tanto per essere completi che in VB esiste la proprietà di Imports statico che hanno tutti i moduli (ossia usare metodi di moduli senza specificare il nome del modulo).


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote