coding.roecher.de

.net and c#
  • rss
  • Home
  • About
  • Impressum

C# 3.0 – Partial Methoden

mario | 3. February 2008

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 müssen in partiellen Typen implementiert werden.
  • Die Methode muss void als Rückgabetyp verwenden.
  • Es sind keine Modifizierer oder Attribute zulässig.

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.

clip_image001

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.

clip_image001[7]

Wie erwartet ist nur die Signatur für die Methode OnAfterFirstnameChange entfernt worden.

Comments
No Comments »
Categories
.NET, c#
Tags
c# 3.0, Partial Methode
Comments rss Comments rss
Trackback Trackback

C# 3.0 – Extension Methods

mario | 3. February 2008

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();
Comments
No Comments »
Categories
.NET, c#
Tags
c# 3.0, Extension Methods
Comments rss Comments rss
Trackback Trackback

Me

TechEd 2009 Berlin

Twitter Updates

Twitter Updates

    follow me on Twitter
    Mario Roecher

    Pages

    • About
    • Impressum

    Recent Posts

    • Die Bahn, Verspätungen, Zugausfälle und die Auswirkungen auf mein OpenSource Projekt
    • Visual Studio 2010 Release Candidate und Entity Framework POCO Template aus Beta 2
    • ExpectedException Attribute und MSTest mit AAA Syntax
    • Could not find stored procedure ‘System.Activities.DurableInstancing.CreateLockOwner’.
    • Login failed for user ‘IIS APPPOOL\DefaultAppPool’.

     

    March 2010
    M T W T F S S
    « Feb    
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  

    Tags

    .NET 4.0 .NET Open Space ADO.NET Assembly Bahn c# c# 3.0 Composite Application Composite Application Guidance Composite Applications DNUG EF Expression Extension Methods External Tool IM Control Koblenz Live Translator Messenger MSTest OpenSource Oracle OracleClient Parallel Computing Partial Methode PDC 2008 Prism Public Key Token Rhino Mocks Silverlight sn.exe UGSSK Unit Test Unit Test Framework Unity Application Block Verspätung Visual Studio WCF WF Windows 7 Windows Live Windows Server AppFabric WPF Zugausfall

    Recent Comments

    • Marvin on Auslesen des PublicKeyToken aus .NET Assemblys
    • coding.roecher.de» Juli Treffen der .NET User Group Koblenz on Gestern bei der DNUG in Koblenz
    • mario on Gestern bei der DNUG in Koblenz
    Locations of visitors to this page

    Meta

    • Log in
    • Entries RSS
    • Comments RSS
    • WordPress.org
    rss Comments rss valid xhtml 1.1 design by jide powered by Wordpress get firefox