Thomas Bandt

Über mich | Kontakt | Archiv

Partielle Methoden

Partielle Klassen gibt es seit zwei Jahren, also dem Release von .NET 2.0 und C# 2.0. Mit dem neuesten Release wurden nun auch partielle Methoden eingeführt, die das Konzept konsequent weiterführen.

Was sind partielle Methoden?

Sie folgen genau dem Konzept der partiellen Klassen - in einer dieser Klassen kann eine Methode deklariert, in der anderen "mit Leben gefüllt" werden:

public partial class Auto
{
private partial void OnStart();
}

public partial class Auto
{
private partial void OnStart()
{
//
}
}

Wo liegt der Vorteil?

Man könnte natürlich die Methode auch über Vererbung bereitstellen, ggf. als virtual deklariert und entsprechend überschrieben. Den in meinen Augen größten Vorteil findet man hier erklärt (übrigens mit noch mehr Details):

"At this point, it is sensible to ask why not just use subclassing and virtual methods? Of course, this would also work but it does have the drawback that the calls, the methods, and the evaluation of the arguments will still be emitted even if the virtual methods are not overridden. So in a system like Linq to SQL that has thousands of little events it allows these events to be very lightweight so that the user only pays for those events that she uses."

Kurzfassung: wird OnStart() nicht implementiert, bleibt also leer, dann verursacht das keinen unnötigen Overhead - es wird ganz einfach vom Compiler rausgeschmissen. Wenn man also erweiterbaren Code schreiben will oder muss, ist das ein interessanter Ansatz.

Zum Schluss noch eine Theorie: ich glaube irgendwer hat es bei Microsoft mit seiner Idee von LINQ geschafft alle zu begeistern - anschließend wurde dann C# um entsprechende Features erweitert. Die Früchte dürfen wir nun alle ernten - finde ich gut :-).

Kommentare

  1. Harald M. Genauck schrieb am Sonntag, 6. Januar 2008 02:25:00 Uhr:

    Hallo Thomas,

    Deine Schlussthese stimmt wohl soweit, abgesehen davon, dass die Erweiterungen die CLR an sich betreffen, und daher nicht nur c#, sondern auch VB davon profitieren...
    http://msdn.microsoft.com/msdnmag/issues/07/06/csharp30/default.aspx?loc=de
  2. Thomas schrieb am Sonntag, 6. Januar 2008 09:44:00 Uhr:

    Da hast du natürlich Recht - danke für den Link :-).
  3. Andreas schrieb am Sonntag, 6. Januar 2008 11:46:00 Uhr:

    Hi Thomas,

    Eine gute Ergänzung ist u.a. ein Post von Bart De Smet's...
    http://community.bartdesmet.net/blogs/bart/archive/2007/07/28/c-3-0-partial-methods-what-why-and-how.aspx
  4. Thomas schrieb am Sonntag, 6. Januar 2008 14:19:00 Uhr:

    Der Mann schreibt gute Sachen, danke auch dir.

    Gutes, weiteres Beispiel:

    http://tinyurl.com/2e93x7


« Zurück  |  Weiter »