Register for your free account! | Forgot your password?

You last visited: Today at 04:14

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C#] Extensions

Discussion on [C#] Extensions within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1
 
elite*gold: 50
Join Date: Oct 2005
Posts: 29
Received Thanks: 7
[C#] Extensions

Mit dem .NET Framework 3.0 hat Microsoft eine Möglichkeit geschaffen bestehende Klassen einfach zu erweitern. An sich ist es kein Problem eigene Klassen zu erweitern, so lange man den Quellcode zur Verfügung hat. Fremde Klassen zu erweitern ist dagegen schnell problematisch. Entweder weil man den Quellcode nicht zur Verfügung hat oder weil es der Author untersagt dessen Code zu verändern.

An dieser Stelle könnte man natürlich einfach eine eigene Methode schreiben. Der Nachteil daran ist, dass man die eigentliche Funktionalität einer Klasse in eine andere trennt und somit die Verbindung schwerer nachzuvollziehen ist.

Mit dem .NET Framework 3.0 kann man sogenannte Extensions schreiben und somit bestehende Typen erweitern. Als erstes Beispiel wollen wir den Typ string so erweitern, dass er eine Methode zur Verfügung stellt die den Inhalt der string Variable als Textdatei an einem Ort speichert, der per Parameter übergeben wird. Das Ziel ist also, dass wir folgenden Code schreiben können und somit den gewünschten Effekt erzielen:

Code:
string text = "Dieser Text soll in eine Textdatei gespeichert werden.";
text.ToFile(@"C:\tutorial\MyNewTextFile.txt");
Um einen Typen erweitern zu können benötigen wir eine neue Klasse. In Visual Studio macht man dazu einfach einen Rechtsklick auf ein Projekt oder Ordner und dann "Add" -> "Class". Als Namen würde ich "StringExtension" vorschlagen.
Wenn ihr die Klasse erstellt habt müsst ihr Sicherstellen, dass die Klasse statisch ( static ) ist. Als erstes löscht ihr den Standard Konstruktor der euch von Visual Studio erzeugt wurde. Anschließend solltet ihr eure Using Statements um den Namespace System.IO erweitern, immerhin wollen wir eine Textdatei erstellen.
Man mag sich wahrscheinlich wundern woher nun die Information kommt mit der festgelegt wird welchen Typen wir erweitern wollen. Bisher haben wir das auch noch nicht definiert. Das macht man erst bei der Methode die einen Typen erweitert. Unsere Methode sieht beispielsweise so aus:

Code:
public static void ToFile (this string content, string path)
Durch das Schlüsselwort "this" vor dem Typen des ersten Parameters definieren wir, dass wir den Typ string erweitern wollen. Das Schlüsselwort this sollte jedem bekannt sein. Die Methode hat nun zwei Parameter, welche wir wie gewohnt nutzen können. Interessant ist hier jedoch, dass wir den Parameter der mit "this" markiert ist nicht beim Aufruf der Methode übergeben, sondern dieser das Objekt selbst darstellt. Um unser Ziel nun zu erreichen müssen wir unsere Methode natürlich noch erweitern.

Code:
public static void ToFile (this string content, string path)
{
	if(string.IsNullOrEmpty(path)) throw new ArgumentNullException("path");

	string directory = Path.GetDirectoryName(path);
	if(!Directory.Exists(directory)) Directory.CreateDirectory(directory);

	using (TextWriter writer = File.CreateText(path)) {
		writer.Write(content);
	}
}
Mit dieser Extension des Typs string können wir nun die Methode ToFile bei string Objekten aufrufen.

Im Quellcode habe ich noch ein paar andere nützliche string Methoden untergebracht, aber letztlich sind euch nicht viele Grenzen gesetzt.

Den Download zum Projekt findet ihr hier ( Das Projekt wurde mit MonoDevelop erstellt ):

LG und HTH
Popicker is offline  
Thanks
2 Users
Old 02/14/2013, 13:20   #2
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
writer.Close() ist redundant, da du ja bereits die using-Klausel verwendest.

Abgesehen davon ist dein Beispiel nicht gerade gut gewählt, da es auch kürzer ohne Extension geht:
File.WriteAllText("C:\file.txt", "foobar");
Schlüsselbein is offline  
Old 02/14/2013, 13:31   #3
 
elite*gold: 50
Join Date: Oct 2005
Posts: 29
Received Thanks: 7
Hallo Schlüsselbein,

du hast offenbar Recht, dass die Close Methode ebenfall die Dispose Methode aufruft. Wusste ich ehrlich gesagt nicht.

Das Beispiel soll nur veranschaulichen wie man Typen erweitert. Ich gebe dir Recht, es gibt Bessere Beispiele, doch dieses hier ist Simpel und im Quellcode habe ich noch einige andere, durchaus sinnvollere Erweiterungen des Typs string geliefert.

Die von dir angemerkte Redundanz habe ich aus dem Post entfernt, jedoch nicht im Quellcode.

[EDIT]
Du hast etwas unrecht. Ich habe mir die Methode WriteAllText() angeschaut. Diese stellt nicht sicher, dass die Directory vorhanden ist und wirft im Fall des nicht Vorhanden seins eine Exception. Somit hat diese Extension schon eine gewisse Daseinsberechtigung.
Popicker is offline  
Reply

Tags
csharp, extension, howto, programieren, tutorial


Similar Threads Similar Threads
How to open .XRS/.XP/.XES file extensions.
08/27/2012 - 9Dragons - 2 Replies
Hey guys like the title say... how to open? what program i need??
elitepvpers Updates, Extensions, Improvements [11/10/11]
04/25/2012 - e*pvp News - EN - 10 Replies
Hello Gamers! Today we implemented a few updates which could be more or less important for some users. I'll give you a small summary here which I will explain further later on: Dispute System for elite*gold trades Changing TBM-Ratings now is only possible until 1 month after finishing the trade elite*gold chargebacks can no longer be rated New payment methods for buying elite*gold Forum Extensions
Beware of the File Extensions!
05/28/2010 - Grand Chase Philippines - 11 Replies
I Know i am not aware of this, but i searched,googled and watch youtube to Learn About this one. Let's Start Define Meaning of .bat It is the file extension of the Virus Be careful to Download .bat's file..
.ibf File Extensions
11/03/2007 - Conquer Online 2 - 4 Replies
Now, I've been seeing all these .ibf files attached to the downloads but have no clue what the hell I'm suppose to do with it. For instance in this Auto Heal thread I was looking through. http://www.elitepvpers.com/forum/co2-exploits-hack s-tools/44572-autolife-v2-0-a.html Now, I downloaded the auto heal Rar file but not the .ibf file since I don't know what I'm suppose to do with it. Someone kindly explain to me, Thanks. Yes, I know I ask a lot of questions haha. :D



All times are GMT +2. The time now is 04:14.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.