Feedback

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

Veröffentlicht von am 07.10.2008
(2 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]
Inherits AutomaticProperties
<DefaultValue(True)> _
Public Property boolWert() As Boolean
Get
End Get
Set
End Set
End Property

<DefaultValue(666)> _
Public Property intWert() As Integer
Get
End Get
Set
End Set
End Property

<DefaultValue("Günther")> _
Public Property stringWert() As String
Get
End Get
Set
End Set
End Property
End Class
GFU-Schulungen  [Anzeige]

ASP.NET 2.0 und 3.5

Dieser Kurs vermittelt Ihnen alle Erweiterungen von Microsoft ASP.NET 2.0. Zu diesen zählen u. a. Data Bindung, Master Pages, und Security.

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

Imports System.ComponentModel
Imports 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 Overridable Sub InitDefaults(o As Object)
            ' Alle Eigenschaften holen:
            Dim propteryInfos As PropertyInfo() = o.GetType().GetProperties(BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.Static)
            
            ' Alle Eigenschaften durchlaufen:
            For Each pi As PropertyInfo In propteryInfos
                ' Nur wenn ein Attribut gesetzt ist:
                If pi.GetCustomAttributes(True).Length > 0 Then
                    ' Attribute holen:
                    Dim attributes As Object() = pi.GetCustomAttributes(GetType(DefaultValueAttribute), True)
                    
                    If attributes IsNot Nothing Then
                        ' Das 1. Attribut holen:
                        Dim dva As DefaultValueAttribute = TryCast(attributes(0), DefaultValueAttribute)
                        
                        If dva IsNot Nothing Then
                            pi.SetValue(o, dva.Value, Nothing)
                        End If
                    End If
                End If
            Next
        End Sub
        '---------------------------------------------------------------------
        ''' <summary>
        ''' Der Konstruktor wird immer als ersters aufgerufen wenn von dieser
        ''' Klasse abgeleitet wird!
        ''' </summary>
        Public Sub New()
            InitDefaults(Me)
        End Sub
    End Class
End Namespace

1 Kommentare zum Snippet

Volker Steitz schrieb am 08.10.2008:
Sehr praktisch!!!
 

Logge dich ein, um hier zu kommentieren!