.
Anmeldung | Registrieren | Hilfe | Posteingang
Suchen
Home Foren News Member Offers Termine Developer Blogs Knowledge Base

Navigation

Navigationslinks überspringen.
Knowledge Base reduzierenKnowledge Base
Tutorials reduzierenTutorials
Webentwicklung
Cliententwicklung
Datenbankentwicklung
IT Professional
Sharepoint
Sprachspezifisch reduzierenSprachspezifisch
C#
Visual Basic
C++
XAML
SQL
JavaScript
Erfahrungsberichte reduzierenErfahrungsberichte
Entwicklersoftware
Bücher
FAQ Grundlagen

Verknüpfungen

  • Knowledge Base durchsuchen
  • Hilfe zur Knowledge Base
  • RSS Feed
  • Twitter

Partielle Methoden

Viele Neuerungen von C# 3.0 wurden bereits hier vorgestellt, allerdings wurden die partiellen Methoden noch nicht erläutert, die möchte ich jetzt anhand dieses kleinen Artikels tun.

Nun was sind "partielle" Methoden? Fangen wir zunächst mal eine Ebene höher an, dass wären demnach partielle Klassen, jeder Programmierer der bereits mit dem .Net Framework 2.0 programmiert hat kennt diese, auch wenn ihm dies nicht bewusst ist.

Eine partielle Klasse ist eigentlich eine ganz normale Klasse, die jedoch räumlich getrennt ist. Was das genau heißt möchte ich anhand der folgenden 2 kleinen CodeSnippets erklären

Zunächst haben wir den Inhalt der Datei Customer.cs

1: using System;
2: using System.Collections.Generic;
3: using System.Text;
4:  
5: namespace Csharp30Features
6: {
7:     partial class Customer
8:     {
9:         //declare
    some private fields here
10:         private string firstname;
11:         private string lastname;
12:         private DateTime dateOfBirth;
13:  
14:         //declare one public method here
15:         public string GetFullname(bool uppercase)
16:         {
17:             if (uppercase)
18:                 return String.Format("{0}
                        {1}", firstname.ToUpper(),
		        lastname.ToUpper());
19:             else
20:                 return String.Format("{0}
                        {1}", firstname, lastname);
21:         }
22:     }
23: }

CodeSnippet #1: Die Codedatei Customer.cs

Der nächste kleine Codeausschnitt zeigt die Datei MySecondCustomer.cs

1: using System;
2: using System.Collections.Generic;
3: using System.Text;
4:  
5: namespace Csharp30Features
6: {
7:     partial class Customer
8:     {
9:         // here
    we declare some public properties
10:         public DateTime DateOfBirth
11:         {
12:             get { return dateOfBirth; }
13:             set { dateOfBirth = value; }
14:         }    
15:  
16:         public string LastName
17:         {
18:             get { return lastname; }
19:             set { lastname = value; }
20:         }
21:     
22:         public string FirstName
23:         {
24:             get { return firstname; }
25:             set { firstname = value; }
26:         }    
27:     }
28: }

CodeSnippet #2: Die CodeDatei MySecondCustomer.cs

 

Die beide Snippets sollen verdeutlichen wie eine räumliche Trennung im Quellcode realisiert wird. Noch deutlicher wird das ganze wenn wir uns nun den IntelliSense der Klasse Customer ansehen die wir einfach in unserer Main Methode initialisieren und uns die Properties anzeigen lassen.

image

Abbildung #1: IntelliSense der Partiellen Klasse Customer

Wie wir sehen stehen im IntelliSense nun sowohl die Properties aus der Codedatei MySecondCustomer.cs, wie auch die Methode GetFullname aus der Codedatei Customer.cs zur Verfügung.

 

Nun wo wir wissen was "partiell" bedeutet kommen wir zurück zur Neuerung in C# 3.0:

Die partiellen Methoden

Eine partielle Methode ist dem nach eine Methode deren Deklaration von deren Implementierung räumlich getrennt ist. Hierbei sind einige Limitierungen zu beachten:

  • partielle Methoden dürfen nur den Rückgabewert void haben
  • partielle Methoden müssen private sein
  • partielle Methoden müssen mit dem Schlüsselwort partial deklariert werden
  • partielle Methoden dürfen keine Parameter mit dem Schlüsselwort out beinhalten, anstatt dessen muss ref verwendet werden
  • partielle Methoden dürfen nicht virtual sein
  • ein Delegat darf nicht partiell sein

Schauen wir uns nun eine einfache Partielle Methode an:

1: //Codefile 1
2: partial void FireMyEventMethod(object sender, EventArgs e);
3:  
4: //Codefile
                    2
5: partial void FireMyEventMethod(object sender, EventArgs e)
6: {
7:     Console.WriteLine("Method
    body comes here");
8:     //
                    continue method body
9: }

CodeSnippet #3: Partielle Methode

Wie dieses Snippet zeigt beinhaltet die Codedatei 1 lediglich den Methodenkopf wobei der Methodenkörper in der Codedatei 2 zu finden ist. Wichtig ist zu beachten dass partielle Methoden, für die es keine Implementierung gibt, nicht in das Build gelangen da der Compiler die Methode in einem solchen Fall ignoriert.

Nun stellt sich die Frage wann partielle Methoden Sinn machen. Das können wir anhand eines einfachen Beispieles verdeutlichen. Angenommen wir schreiben eine Klasse Product und wollen eine Möglichkeit bereitstellen dass man auf die Änderung der Property Price reagieren kann, mit partiellen Methoden würde dies wie folgt aussehen:

1: partial class Product
2: {
3:     private double price;
4:  
5:     public double Price
6:     {
7:         get
8:         {
9:             return price;
10:         }
11:         set
12:         {
13:             this.price = value;
14:             OnPriceChanged();
15:         }
16:     }
17:  
18:     partial void OnPriceChanged();
19: }

CodeSnippet #4: partielle Klasse Product mit partieller Methode OnPriceChanged()

Die Klasse Product enthält somit nur den Methodenkopf, wenn nun eine Reaktion ausgelöst werden soll nachdem die Property geändert worden ist, kann man einfach in einer weiteren partiellen Klasse die Methode implementieren und dementsprechend wird die verwendet, wird dies nicht getan wird die Methode OnPriceChanged() und all deren Referenzen komplett vom Compiler ignoriert.

 

Somit sollte auch der Anwendungsbereich von partiellen Methoden klar sein.

von ThorstenHans, 31.07.2008 zugeordnet zu C# , Sprachenspezifisch .

Kommentare

Es sind noch keine Kommentare vorhanden.

Eigener Kommentar

Sie müssen angemeldet sein, um ein Kommentar zu erstellen.
  • Schwierigkeit: Einsteiger
  • Views: 1949
  • Zur Druckversion
  • Artikel von ThorstenHans

Kick it on dotnet-kicks.de

Artikel

Autor

Kick it!

Wenn ihnen dieser Artikel gefällt, bitte "kicken" sie ihn.

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum