Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Typen von Klasse in statischen Methode herausbekommen

1 view
Skip to first unread message

Thorsten Blawatt

unread,
Jan 31, 2007, 3:48:21 AM1/31/07
to
Hallo,

gibt es eine Möglichkeit in einer statischen Methode den Typen der Klasse,
indem sich die Methode befindet, herauszubekommen. Also auch dann, wenn eine
andere Klasse von der Klasse erbt?
Beispiel:
Klasse A implementiert die Methode GetClassType, welche static ist. Klasse B
erbt von Klasse A. Wenn ich nun B.GetClassType aufrufe, würde ich gerne den
Typen von B bekommen.
Die Implementation bei einer nicht-statischen Methode würde so aussehen:

public System.Type GetClassType
{
get
{
return this.GetType();
}
}


und bei einer statischen Methode würde sie so aussehen:

public static System.Type GetClassType
{
get
{
return typeof(A);
}
}

nur das diese Implementation immer den Typen von A zurück liefert, anstatt
wenn ich die Methode auf B aufrufe mir den Typen von B zurückzuliefern.

Schöne Grüße,
Thorsten Blawatt


Günter Prossliner

unread,
Jan 31, 2007, 10:58:47 AM1/31/07
to
Hallo Thorsten!

> und bei einer statischen Methode würde sie so aussehen:
>
> public static System.Type GetClassType
> {
> get
> {
> return typeof(A);
> }
> }
>
> nur das diese Implementation immer den Typen von A zurück liefert,
> anstatt wenn ich die Methode auf B aufrufe mir den Typen von B
> zurückzuliefern.

Da statische Methoden nicht virtuell sind, kannst Du die statische Methode
nur in B neu definieren:

class B : A {
public new static Type GetClassType{
get {return typeof(B); }
}
}

Wobei: Welchen Sinn hat das Ganze? Im Gegensatz zu instanz-Methoden können
statische Members können ja nicht vituell sein. Also musst Du im Source-Code
ohnehin immer A.GetClassType() bzw. B.GetClassType() schreiben (und nicht
z.B. irgendeineInstanz.GetClassType()). Dann kannst Du ja gleich typeof(A) /
typeof(B) schreiben, oder?


OK?
mfg GP


Alexander Widera

unread,
Jan 31, 2007, 6:22:34 PM1/31/07
to
ich hatte vor kurzem ein ähnliches Problem...
mir haben dabei generische Klassen geholfen. (nur in > .net2.0)
such einfach mal danach

public class<T> where T: new()
{
....
}

vielleicht kannst du das auch irgendwie anwenden bei deinem Problem.

Alex


"Thorsten Blawatt" <thorsten...@syncos.com> schrieb im Newsbeitrag
news:OarBRSRR...@TK2MSFTNGP03.phx.gbl...

0 new messages