Multithreading, Static Methods und Locking
mario | 7. February 2008Hier zwei Links zum Block von Jeff W. Barnes. Er beschreibt in englisch wie und wann lock in statischen Methoden benutzt werden sollte.
Hier zwei Links zum Block von Jeff W. Barnes. Er beschreibt in englisch wie und wann lock in statischen Methoden benutzt werden sollte.
Partielle Methoden sind Hooks die Klassen Designer bereitstellen. Entwickler können diese gegebenenfalls implementieren. Wird die Methode nicht vom Entwickler implementiert entfernt der Compiler die Signatur. Partielle Methoden müssen folgende Bedingungen erfüllen:
Partielle Methoden eignen sich hervorragend für automatisiert erzeugten Code.
Der automatisiert erzeugte Code:
1: public partial class Person
2: {
3: private string firstname;
4: public string Firstname
5: {
6: get { return firstname; }
7: set
8: {
9: //Partial Method
10: OnBeforeFirstnameChange(value);
11:
12: firstname = value;
13: //Partial Method
14: OnAfterFirstnameChange(firstname);
15: }
16: }
17:
18: partial void OnBeforeFirstnameChange(string name);
19: partial void OnAfterFirstnameChange(string name);
20: }
Wenn wir als Entwickler die beiden Methoden OnBeforeFirstnameChange und OnAfterFirstnameChange nicht gesondert implementieren wird uns der Compiler die Signaturen entfernen. Kontrollieren kann man dies mit einem Reflector wie z.B. mit Lutz Roeder’s Reflector.
Im nächsten Schritt implementieren wir die partielle Methode OnBeforeFirstnameChange.
1: public partial class Person
2: {
3: partial void OnBeforeFirstnameChange(string name)
4: {
5: Debug.WriteLine("Firstname: " + name);
6: }
7: }
Anschließend kompilieren wir den Code erneut und betrachten das Ergebnis im Reflector.
Wie erwartet ist nur die Signatur für die Methode OnAfterFirstnameChange entfernt worden.
Mit Erweiterungsmethoden (Extension Methods) können Sie vorhandenen Typen Methoden hinzufügen, ohne einen neuen abgeleiteten Typ zu erstellen und ohne den ursprünglichen Typ neu kompilieren oder auf andere Weise bearbeiten zu müssen. Erweiterungsmethoden sind eine besondere Art von statischen Methoden, die Sie jedoch wie Instanzmethoden für den erweiterten Typ aufrufen können. Für in C# und Visual Basic geschriebenen Clientcode gibt es keinen sichtbaren Unterschied zwischen dem Aufrufen einer Erweiterungsmethode und den Methoden, die in einem Typ tatsächlich definiert sind.
Hier der ursprünglich Typ Person:
1: public partial class Person
2: {
3: private string firstname;
4: public string Firstname
5: {
6: get { return firstname; }
7: set
8: {
9: //Partial Method
10: OnBeforeFirstnameChange(value);
11:
12: firstname = value;
13: //Partial Method
14: OnAfterFirstnameChange(firstname);
15: }
16: }
17:
18: partial void OnBeforeFirstnameChange(string name);
19: partial void OnAfterFirstnameChange(string name);
20: }
Im nächsten Schritt legen wir eine statische Klasse für die Erweiterungen an und implementieren die statische Methode AdressLabel die als Erweiterungsmethode für den Typ Person dienen soll.
1: public static class PersonExtension
2: {
3: public static string AdressLabel(this Person p)
4: {
5: return p.Firstname;
6: }
7: }
Erweiterungsmethoden werden als statische Methoden definiert, jedoch mithilfe einer Instanzmethodensyntax aufgerufen. Der erste Parameter bestimmt, für welchen Typ die Methode gilt, und vor dem Parameter steht der this-Modifizierer. Erweiterungsmethoden befinden sich nur dann im Bereich, wenn Sie den Namespace explizit mit einer using-Direktive in Ihren Quellcode importieren.
Die Verwendung der Erweiterungsmethode ist denkbar einfach:
1: Person p = new Person();
2: string label = p.AdressLabel();

| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « Feb | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | ||||
Recent Comments