2009-09-24 25 views
6

Mi sono trovato a dover rimuovere la prima riga di una stringa abbastanza spesso mentre si lavora su un parser di testo in C#. Ho messo insieme una semplice funzione per farlo per me, ma provenendo da uno sfondo PHP, non ho idea di dove metterlo dato che non posso definire una funzione al di fuori di una classe. Qual è un modo abituale per farlo in .NET? Creo una classe statica per memorizzare la mia funzione?Dove dovrei inserire funzioni varie in un progetto .NET?

+1

Che tipo di progetto .NET? ASP.NET? ASP.NET MVC? WinForms? Silverlight? Le convenzioni per "dove metterlo" variano a seconda del tipo di progetto. – Portman

+0

Questo sarebbe WinForms. –

risposta

18

Sì, classi di supporto statiche sono di solito il modo per farlo.

Inoltre, in C# 3 è possibile dichiarare il metodo come questo:

public static string RemoveFirstLine(this string s) { 
    ... 
} 

per renderlo un metodo di estensione. Quindi puoi chiamarlo su qualsiasi stringa come se il metodo fosse dichiarato sul tipo di stringa stesso.

+0

Per quello che Butterfly sta descrivendo, i metodi di estensione sono decisamente la strada da percorrere. – Bomlin

+0

Wow, i metodi di estensione sono accurati! Questo è quello che ho finito per usare. Grazie per averli menzionati. –

20

Generalmente faccio una classe statica Helper o Utility e quindi inserisco le funzioni di aiuto corrispondenti.

Inoltre, cerco di mantenere logicamente le classi Helper e Utility, inserendo le funzioni di analisi del testo accanto alle funzioni di conversione dell'oggetto non ha senso. La confusione viene chiarita con una classe TextUtils e una classe ConversionUtils.

+0

+1 mi ha battuto. –

+6

Probabilmente anche trarrai vantaggio dall'effettuare tali metodi di estensione delle funzioni. –

2

Generalmente creo una classe di utilità e definisco metodi di supporto statici.

4

Non penso che ci sia uno standard per questo. Tendo a creare una classe statica chiamata BlahUtil. Per il tuo esempio, lo renderei un metodo statico su StringUtil. Questo mi aiuta a raggruppare i metodi correlati in unità sensibili, rendendo più facile scoprirli e condividerli tra i team.

È inoltre possibile quindi scegliere quale di questi metodi sono esposti come metodi di estensione (dal C# 3.0):

public static class StringUtil 
{ 
    public static string RemoveFirstLine(this string multiLineString) 
    { 
     // ... 
    } 
} 
0

Vorrei creare una classe di lavoratore statico per tali funzioni. Forse non è il modo più bello, ma quello che mantiene le cose semplici ...;)

K

0

Utilizzare un extension method per una stringa. Ecco a cosa servono

+0

Dannazione aggiunta mentre stavo scrivendo la mia risposta !! –

1

Ho eseguito le classi "helper" statiche ma dopo alcune analisi; questo tipo di funzione helper finisce sempre come un'implementazione distinta di classe. Nel tuo caso avresti una classe "parser di testo di base" e una classe derivata che sovrascrive il metodo "parse".

0

È possibile utilizzare una classe con metodi statici. Qualcosa come ParserUtils.RemoveFirstLine(). Su .NET 3.5 e versioni successive a volte è possibile utilizzare i metodi di estensione quando le funzioni dell'utilità sono correlate a una classe che non è possibile modificare, come la classe String. Intellisense mostrerà il metodo di estensione su qualsiasi oggetto stringa nel progetto.

6

Fare attenzione!

  • Le funzioni di utilità generiche che sono trasversali devono risiedere in uno spazio dei nomi di utilità più elevato. Analisi delle stringhe, manipolazione dei file, ecc.

  • Gli oggetti di estensione devono vivere nel proprio spazio dei nomi.

  • Le funzioni di utilità che si applicano a un set specifico di oggetti o metodi business devono essere comprese nello spazio dei nomi di tali oggetti. Spesso con un suffisso Helper, ovvero BusinessObjectHelper. Il nome è importante qui. Stai creando un contenitore per metodi miscellanei o avrebbe più senso raggrupparli in oggetti specializzati, ad esempio un parser?

3

Se si utilizza C# 3.0, è possibile prendere in considerazione l'utilizzo di un metodo di estensione!

public static class StringExtensions 
{ 
    public static string RemoveFirstLine(this string myString) 
    { 
     return myString.Remove("line..!"); 
    } 
} 

Poi nel codice è possibile fare questo:

string myString = "Hello World etc"; 

string removedLineString = myString.RemoveFirstLine(); 
+1

Generalmente odio i metodi di estensione. Rompono l'incapsulamento di classe e libreria di funzionalità. Chi sono io per "riparare" la libreria .net? Ora qualcuno esegue un metodo nel mio codice myString.Whargarble(). Dove trovano quel metodo? Penso che myString = MyCompany.StringUtils.Whargarble (myString) sia una dichiarazione più chiara di cosa sta succedendo. –

+0

Questo è un punto giusto, sta a voi come implementare il codice :). Non sono sicuro che un'estensione sia considerata una correzione, è più un'estensione ad essa! Lo trovano facendo clic su di esso e selezionando F12, e identifica il suo metodo di estensione con la piccola icona in intellisense. È improbabile che lo incontrino se li aggiungi in uno spazio dei nomi di estensioni; quindi esplicitamente "opt-in" per usarlo. Non ho problemi con esso personalmente. Come potrebbe "rompere l'incapsulamento della funzionalità" !? È incapsulato all'interno di una classe di estensioni! –

0

Le estensioni sono la strada da percorrere in quei casi. Aggiungi letteralmente la tua funzione all'evento. L'unica cosa è che non è possibile eseguire il metodo statico nel 2008.

Problemi correlati