Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 159
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Standardwerte für automatische Eigenschaften in .net 3.x


Autor: Günther Foidl
Sprache: C#
Bewertung:
5.44 (2 votes)
Anzahl der Aufrufe: 3489
  
Kick it on dotnet-kicks.de  

Beschreibung:

Die Einführung von automatischen Eigenschaften hat den großen Vorteil dass weniger Tipparbeit nötig ist.

Ein wesentlicher Nachteil ist dass keine Standardwerte gesetzt werden können.

Nachfolgend beschrieben ist eine Klasse die es ermöglich Standardwerte per Attribut zu setzten.

Verwendungsbeispiel:
public class MyClass : AutomaticProperties
{
[DefaultValue(true)]
public bool boolWert { get; set; }

[DefaultValue(666)]
public int intWert { get; set; }

[DefaultValue("Günther")]
public string stringWert { get; set; }
}


Abgelegt unter: Eigenschaft, Eigenschaften, automatische Eigenschaft, Standardwerte.



C#
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System.ComponentModel;
using System.Reflection;

namespace gfoidl.Tools
{
	public class AutomaticProperties
	{
		/// <summary>
		/// Weist die Standardwerte den Eigenschaften zu.
		/// </summary>
		/// <param name="o">
		/// Die Klasse bzw. die Instanz davon dessen Eigenschaften
		/// gesetzt werden soll
		/// </param>
		public virtual void InitDefaults(object o)
		{
			// Alle Eigenschaften holen:
			PropertyInfo[] propteryInfos =
				o.GetType().GetProperties(
					BindingFlags.Public |
					BindingFlags.NonPublic |
					BindingFlags.Instance |
					BindingFlags.Static);

			// Alle Eigenschaften durchlaufen:
			foreach (PropertyInfo pi in propteryInfos)
			{
				// Nur wenn ein Attribut gesetzt ist:
				if (pi.GetCustomAttributes(true).Length > 0)
				{
					// Attribute holen:
					object[] attributes =
						pi.GetCustomAttributes(
							typeof(DefaultValueAttribute),
							true);

					if (attributes != null)
					{
						// Das 1. Attribut holen:
						DefaultValueAttribute dva =
							attributes[0] as DefaultValueAttribute;

						if (dva != null)
							pi.SetValue(o, dva.Value, null);
					}
				}
			}
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Der Konstruktor wird immer als ersters aufgerufen wenn von dieser
		/// Klasse abgeleitet wird!
		/// </summary>
		public AutomaticProperties()
		{
			InitDefaults(this);
		}
	}
}
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Rainer Hilmer schrieb am:  06.11.2008 12:43:46

Du schreibst eine Attribut-Klasse ohne daß diese von Attribute erbt. Ich wußte gar nicht daß das möglich ist. Hammer! 10 Punkte dafür.
Günther Foidl schrieb am:  06.11.2008 14:18:30

Ich auch nicht ;)

Das DefaultValue-Attribut wird ist vom Namespace System.ComponentModel und eigentlich für Steuerelemente gedacht. Es hindert aber nichts daran dieses Attribut auch anderswertig (wie hier) zu verwendet. Deshalb ist ein erben von Attribut nicht nötig.


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.