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?
risposta
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.
Per quello che Butterfly sta descrivendo, i metodi di estensione sono decisamente la strada da percorrere. – Bomlin
Wow, i metodi di estensione sono accurati! Questo è quello che ho finito per usare. Grazie per averli menzionati. –
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.
+1 mi ha battuto. –
Probabilmente anche trarrai vantaggio dall'effettuare tali metodi di estensione delle funzioni. –
Generalmente creo una classe di utilità e definisco metodi di supporto statici.
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)
{
// ...
}
}
Vorrei creare una classe di lavoratore statico per tali funzioni. Forse non è il modo più bello, ma quello che mantiene le cose semplici ...;)
K
Utilizzare un extension method per una stringa. Ecco a cosa servono
Dannazione aggiunta mentre stavo scrivendo la mia risposta !! –
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".
È 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.
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?
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();
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. –
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! –
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.
- 1. Dove dovrei inserire le interfacce per MEF?
- 2. Dove dovrei inserire le funzioni di utilità di test in Rust?
- 3. dove inserire i file .properties in un progetto Eclipse?
- 4. Dove dovrei inserire i miei script Python in Linux?
- 5. Dove posso inserire il mio progetto prima_request
- 6. Dove mettere le funzioni di supporto in un progetto phoenix?
- 7. Dove inserisco le funzioni di utilità nel mio progetto Python?
- 8. Dove dovrei definire le funzioni globali in ExtJS 4 MVC?
- 9. .gitignore file, dove dovrei inserirlo nel mio progetto xcode?
- 10. Dove inserire le funzioni definite dall'utente in Angular JS?
- 11. Dove dovrei inserire il mio viewdata fortemente tipizzato asp.net-mvc?
- 12. Dove devo inserire un plugin .vim?
- 13. Dove dovrei inizializzare pg-promise
- 14. Dove posso trovare un elenco delle varie versioni di binari?
- 15. In un nuovo progetto Django, dovrei utilizzare le visualizzazioni basate su classi o su funzioni?
- 16. Dove dovrei posizionare lo scriptmanager
- 17. Perché dovrei usare funzioni divergenti?
- 18. Come aggiungere un file alla cartella Varie del progetto SSIS
- 19. Dove inserire il file .xib all'interno del progetto quadro?
- 20. Dove inserire le dipendenze DLL nel progetto Visual Studio C++?
- 21. Dove dovrei definire i miei datatemplates?
- 22. Dove dovrei scrivere un file temporaneo?
- 23. Simbolo di valuta per varie lingue in .net
- 24. Script per inserire la registrazione in tutte le funzioni di un progetto?
- 25. Come posso importare un progetto .NET Core in un altro progetto .NET Core in Visual Studio?
- 26. Dove inserire i file di testo in un progetto Web dinamico di Eclipse utilizzando Tomcat?
- 27. Dove conservare Dockerfile in un progetto?
- 28. Dove inserire "WSGIPassAuthorization On"?
- 29. Controllo personalizzato in un progetto di applicazione Web .net
- 30. dove dovrei mettere in removeObserver AppDelegate.m, ios
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
Questo sarebbe WinForms. –