![]() |
Herkunft von Methoden/Properties ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo. :stupid: Ihr wisst ja, dass ich nebenbei immer noch ein bisschen an der Hilfe von SharpDevelop schraube. Zurzeit ist das die dynamische Hilfe von SharpDevelop 2.0.
Wenn man im Form-Designer von #d ein Objekt anklickt, etwa eine TextBox, dann sucht sich die dynamische Hilfe die passenden Themen dazu heraus. Zusätzlich bietet sich auch eine Hilfe zu dem im Objektinspektor aktiven Punkt an. Im Beispiel (s. Bild im Anhang) wäre das etwa die Text-Eigenschaft. Dazu hänge ich einfach an den ermittelten Namen der Klasse (System.Windows.Forms.TextBox) den Namen der Methode an (*.Text). Einige Klassen erben aber solche Sachen von ihren übergeordneten Klassen. Und deshalb gibt es bspw. beim Button kein Thema zu System.Windows.Forms.Button.Text, sondern da müsste ich auf *.ButtonBase.Text ausweichen. Tja, wie mache ich das am elegantesten? Momentan "schleife" ich mich durch die Klasse durch, bis ich bei der Top-Klasse angelangt bin und übergebe alle so ermittelten Suchbegriffe an die Hilfe. Ich weiß ja zu diesem Zeitpunkt noch nicht, wann die Hilfe fündig werden wird, also kann ich leider auch nicht vorher aufhören:
Code:
"selectedObject" und "selectedItem" kommen quasi aus dem PropertyGrid von SharpDevelop. Das Ausrufungszeichen setze ich absichtlich davor, damit die Hilfefunktion später weiß, dass sie die Anzeige weiterer Themen mit ! am Anfang unterdrücken soll, wenn bereits zum ersten Begriff in der Liste was gefunden wurde.
Type myObject = selectedObject.GetType();
if(selectedItem != null) { this.AddToStringCollection(String.Format("!{0}.{1}", myObject.FullName, selectedItem.Label)); while(myObject.BaseType != null) { myObject = myObject.BaseType; this.AddToStringCollection(String.Format("!{0}.{1}", myObject.FullName, selectedItem.Label)); } } Da muss es doch was Einfacheres/Eleganteres geben. :gruebel: |
Re: Herkunft von Methoden/Properties ermitteln
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:
Oder um es mit einem Hauch von Syntax Highlighting zu zeigen:
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; } } }
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(); Output Control TextBox |
Re: Herkunft von Methoden/Properties ermitteln
Na, das kommt doch heute noch in das Repository. Am besten mit dem Originalzitat aus der PM :mrgreen:.
Herzlichen Dank. Zitat:
|
Re: Herkunft von Methoden/Properties ermitteln
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz