Feedback

C# - Standardwerte für automatische Eigenschaften in .net 3.x

Veröffentlicht von am 07.10.2008
(4 Bewertungen)
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; }
}
GFU-Schulungen  [Anzeige]

VB.NET Einführung

Die Schulung zeigt Ihnen, wie Sie einfache, benutzerorientierte Programme, die auf Datenbanken zugreifen, in VB.NET eigenständig entwickeln. 

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

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);
		}
	}
}

2 Kommentare zum Snippet

Rainer Hilmer schrieb am 06.11.2008:
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:
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.
 

Logge dich ein, um hier zu kommentieren!