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
|
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
|