ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
240
240
EMPFEHLEN
-
Hallo,
ich habe folgendes Problem. Ich habe eine Basisklasse in der ich eine Membervariable habe die den Klassennamen der vererbenden Klasse ermitteln soll. Das funtioniert aber verständlicher weise nur wenn die Klasse instanziert wird. Bei einer Statischen Methode gibt die Methode den Klassenamen der Basisklasse zurück.
Hier der Code:
Ausgabe:Code csharp: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 46
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace static_test { class Program { static void Main(string[] args) { stTest.testStatic(); new stTest().testMember(); Console.ReadLine(); } } /// <summary> /// /// </summary> class stTestBase { public static String aaa = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name; public stTestBase() { aaa = this.GetType().Name; } } /// <summary> /// /// </summary> class stTest:stTestBase { public void testMember() { Console.WriteLine("Member:\t" + aaa); } public static void testStatic() { Console.WriteLine("Static:\t" + aaa); } } }
Code :1 2
Static: stTestBase Member: stTest
Weiß jemand wie ich das für die statischen Methoden auch hin bekomme dass die ableitende klasse angezeigt wird?
gruß,
col.blakeÜber so viele Sachen wächst Gras , man kann keiner Wiese mehr trauen.
-
Hallo,
Da wirst du nicht drum herum kommen in jeder abgeleiteten Klasse Code zu schreiben. Die einfachste Möglichkeit ist glaub ich in den abgeleiteten Klassen einen statischen Konstruktor zu schreiben der die initialisierung von aaa übernimmt.
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
class stTest : stTestBase { static stTest() { aaa = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name; } public void testMember() { Console.WriteLine("Member:\t" + aaa); } public static void testStatic() { Console.WriteLine("Static:\t" + aaa); } }
-
Hallo Steiner_B,
danke für Deine Antwort. Ich hab mir schon gedacht dass das nicht so einfach ist. Da ich ja faul bin, wollte ich ja genau das verhindern, dass jede ableitende Klasse nochmal angefasst werden muss.
Ich habe auch einen Ansatz gefunden, der aber ebenso nicht wirklich zufriedenstellend ist:
Code csharp:1 2 3 4 5 6 7 8 9
public class stTest<T> { protected static String aaa = typeof(T); } class stTest : stTestBase<stTest> { ... }
Geändert von colblake (15.07.11 um 07:40 Uhr)
Über so viele Sachen wächst Gras , man kann keiner Wiese mehr trauen.
-
Deine Lösung funktioniert grundsätzlich auch, du müsstest halt die stTest wieder als Template-Klasse schreiben damit die Ausgabe für Klassen die von stTest ableiten auch noch stimmt.
Weniger Schreibarbeit ist sicher deine Lösung.
Ähnliche Themen
-
Vererbung / Reflection
Von DEV im Forum Java GrundlagenAntworten: 12Letzter Beitrag: 06.12.10, 13:21 -
Können statische Methoden überlagert werden?
Von Syrill im Forum Java GrundlagenAntworten: 2Letzter Beitrag: 13.11.10, 22:30 -
statische Attribute: Vererbung und Zugriff darauf
Von automatix1311 im Forum Java GrundlagenAntworten: 4Letzter Beitrag: 29.10.08, 18:37 -
Statische Methoden/Klassen?
Von NeMeSiS1987 im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 11.06.08, 10:54 -
Statische Methoden versus Application-Bean
Von AKST im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 01.06.06, 15:25





Zitieren
Login





