Mega Code Archive

 
Categories / VB.Net / Reflection
 

Using FlattenHierarchy to get inherited static protected and public members

Imports System Imports System.Reflection Imports System.IO Public Class TestClass     Public Name As String     Private values() As [Object] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}     Default Public Property Item(ByVal index As Integer) As [Object]         Get             Return values(index)         End Get         Set(ByVal Value As [Object])             values(index) = Value         End Set     End Property     Public ReadOnly Property Value() As [Object]         Get             Return "the value"         End Get     End Property     Public Sub New(ByVal initName As String)         Name = initName     End Sub     Public Sub New()         MyClass.New("initialName")     End Sub     Private methodCalled As Integer = 0     Public Shared Sub SayHello()         Console.WriteLine("Hello")     End Sub     Public Sub AddUp()         methodCalled += 1         Console.WriteLine("AddUp Called {0} times", methodCalled)     End Sub     Public Shared Function ComputeSum(ByVal d1 As Double, ByVal d2 As Double) As Double         Return d1 + d2     End Function     Public Shared Sub PrintName(ByVal firstName As [String], ByVal lastName As [String])         Console.WriteLine("{0},{1}", lastName, firstName)     End Sub     Public Sub PrintTime()         Console.WriteLine(DateTime.Now)     End Sub     Public Sub Swap(ByRef a As Integer, ByRef b As Integer)         Dim x As Integer = a         a = b         b = x     End Sub End Class <DefaultMemberAttribute("PrintTime")> _ Public Class TestClass2     Public Sub PrintTime()         Console.WriteLine(DateTime.Now)     End Sub End Class Public Class Base     Shared BaseOnlyPrivate As Integer = 0     Protected Shared BaseOnly As Integer = 0 End Class Public Class Derived     Inherits Base     Public Shared DerivedOnly As Integer = 0 End Class Public Class MostDerived     Inherits Derived End Class Class Invoke     Public Shared Sub Main()         Dim t As Type = GetType(TestClass)         Dim c As New TestClass()         Dim args() As Object = {100.09, 184.45}         Dim finfos() As FieldInfo = GetType(MostDerived).GetFields(BindingFlags.NonPublic Or _               BindingFlags.Public Or BindingFlags.Static Or BindingFlags.FlattenHierarchy)         For Each finfo As FieldInfo In finfos             Console.WriteLine("{0} defined in {1}.", finfo.Name, finfo.DeclaringType.Name)         Next     End Sub End Class