.
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

C# 3.0 Feature: Automatic Properties

Ebenfalls neu im .Net Framework 3.5 sind Automatic Properties. Jeder .Net Entwickler kenn die gewöhnlichen Properties die ein jeder schon hunderte male runtergeschrieben hat. Jedes mal geht viel Zeit verloren bei der Klassenimplementierung weil man für alle Properties noch private Felder deklarieren muss und diese entsprechend in den Gettern und Settern der Propertoes zurückgeben bzw. setzen muss.

 

Als Ausgangspunkt nehmen wir die folgende einfache Klasse Person.

   1: public class Person
   2: {
   3:     private string vorname;
   4:  
   5:     public string Vorname
   6:     {
   7:         get { return this.vorname;}
   8:         set { this.vorname = value;}
   9:     }
  10: }

Code Snippet #1: Klasse Person Version 1

 

Wenn wir das Snippet nun um beliebig viele Properties erweitern wird die Klasse immer unübersichtlicher, weil ich eventuell dauernd scrollen muss um von einer Property auf das entsprechende Feld zu kommen.

 

Halten wir also an dieser Stelle fest:

Die bis jetzt bekannten Properties haben folgende Nachteile

  1. Sie mindern die Lesbarkeit bei großen Klassen
  2. Sie steigern den Aufwand durch deklarierung bzw. Initialisierung von privaten Feldern

Genau hier ist der Ansatz der Automatic Properties von C# 3.0. Automatic Properties können immer dann eingesetzt werden, wenn eine Eigenschaft den tatsächlichen Wert des Feldes zurück gibt, bzw. setzt.

Nehmen wir zunächst die Sicht des Entwickler, die Schreibweise von Automatic Properties ist sehr einfach, wenn wir zum Beispiel die Klasse Person um die Automatic Property Nachname erweitern wollen müssen wir folgendes tun:

   1: public string Nachname 
   2: { 
   3:     get; 
   4:     set; 
   5: }

Code Snippet #2: Automatic Property Nachname

Die Besonderheiten liegen hier in Zeile 3 und 4 durch diese Implementierung weiß der C# Compiler, dass es sich bei dieser Property um eine Automatic Property handelt.

Aus Entwickersicht war dies schon alles was zu tun ist. Aber kommen wir nun zum Backend, was passiert genau im Hintergrund was erstellt der Compiler?

Ein Blick in den Disassembler verrät uns, dass der Compiler auch für unsere Property Nachname ein privates Feld mit dem Namen '<Nachname>k_BackingField' vom Typ string anlegt.

 

image

Abbildung #1: IL DASM der Testbibliothek

 

Readonly-Automatic Property

Des Weiteren sollte die Erstellung von Read-Only Properties erläutert werden:

Das folgende Code Snippet resultiert in einer Kompilerwarnung da der Compiler sowohl getter als auch setter erwartet

   1: public Guid Id
   2: {
   3:     get;
   4: }

Code Snippet #3: Falsche Implementierung einer ReadOnly-Automatic Property

 

Der richtige Weg ist, einen getter mit öffentlichen Zugriffsrechten zu erstellen und den setter mittels private von externen Zugriffen zu schützen. Die richtige Implementierung des Properties Id sieht demnach folgendermaßen aus:

   1: public Guid Id
   2: {
   3:     get;
   4:     private set;
   5: }

Code Snippet #4: Richtige Implementierung einer ReadOnly-Automatic Property

 

Ein kleiner Tip noch zum Abschluss in C# 3.0 können Automatic Properties mit Hilfe des Codesnippets 'prop' eingefügt werden, dann geht es noch schneller ;)

image

von ThorstenHans, 16.07.2008 zugeordnet zu keiner Kategorie .

Kommentare

Es sind noch keine Kommentare vorhanden.

Eigener Kommentar

Sie müssen angemeldet sein, um ein Kommentar zu erstellen.
  • Schwierigkeit: Einsteiger
  • Views: 5260
  • 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