Du bist aber auch ungeduldig...
Da ich nicht weiß, ob du notfalls auch überladene/reintroduced Meber haben willst, habe ich es in einen Iterator gepackt.
Er läuft durch die gefundenen Member und gibt dir den Typen, in dem er deklariert/überschrieben wurde.
Code:
public static class TypeHandling
{
public static IEnumerable<Type> FindDeclaringType(Type type, string memberName)
{
MemberInfo[] memberInfos = type.GetMember(memberName);
foreach (MemberInfo memberInfo in memberInfos)
{
yield return memberInfo.DeclaringType;
}
}
}
Oder um es mit einem Hauch von Syntax Highlighting zu zeigen:
Delphi-Quellcode:
uses
System.Collections.Generic,
System.Reflection;
type
TypeHandling = public static class
public
class method FindDeclaringType(&type : System.Type; memberName : String) : IEnumerable<System.Type>; iterator;
end;
implementation
class method TypeHandling.FindDeclaringType(&type : System.Type; memberName : String) : IEnumerable<System.Type>;
begin
var memberInfos := &type.GetMember(memberName);
for memberInfo : MemberInfo in memberInfos do
yield (memberInfo.DeclaringType);
end;
Kleines Beispiel:
Code:
TextBox myObject = new TextBox();
foreach (Type type in TypeHandling.FindDeclaringType(myObject.GetType(),
"Name"))
{
Console.WriteLine(type.Name);
}
foreach (Type type in TypeHandling.FindDeclaringType(myObject.GetType(),
"Text"))
{
Console.WriteLine(type.Name);
}
Console.ReadLine();