Überprüfen, ob Instanz eines Typs
Verwenden, um zu überprüfen, ob c
ist eine Instanz von TForm
.
c.GetType().Name.CompareTo("TForm") == 0
Gibt es eine weitere Art sicheren Weg, es zu tun, neben der Verwendung eines string
als param zu CompareTo()
?
- Ich hoffe, Sie tun es nicht in Java so. Java ist
instanceof
und C#'sis
sind viel bessere Möglichkeiten, es zu tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den verschiedenen Antworten hier haben zwei unterschiedliche Bedeutungen.
Wenn Sie möchten, um zu überprüfen, ob eine Instanz von ein genauer Typ dann
ist der Weg zu gehen.
Wenn Sie wissen möchten, ob
c
ist eine Instanz vonTForm
oder eine Unterklasse dann verwendenis
/as
:oder
Es ist es Wert, klar in Ihrer Meinung darüber, welche dieser Verhaltensweisen Sie eigentlich wollen.
is
undas
mit pattern-matching:if (x is TForm tf) {…
oder wenn Sie planen, mit
c
alsTForm
verwenden Sie das folgende Beispiel:Zweiten Beispiel braucht nur zu überprüfen, um zu sehen, ob
c
ist der TypTForm
einmal. Whereis wenn Sie überprüfen, ob sehen, wennc
ist der TypTForm
dann warf Sie die CLR macht eine zusätzliche Kontrolle.Hier ist ein Referenz.
Edit: Geklaut von Jon Skeet
Wenn Sie sicherstellen möchten, dass
c
istTForm
und nicht jede Klasse erbt vonTForm
, dann verwenden SieJa, das "ist" Stichwort:
Details finden Sie auf der MSDN-Website: http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx
Auch, etwas in die gleiche Richtung
Hier: http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx
typeof(Class).IsAssignableFrom(object.getType())
ähnlich der Java -instanceof
Betreiber.Etwas kompakter als die anderen Antworten, wenn Sie möchten, verwenden Sie c als ein TForm:
Versuchen Sie die folgenden
Wie andere erwähnt haben, die "ist" - Schlüsselwort. Allerdings, wenn Sie gehen, um später Stimmen Sie zu, dass die Art, wie zB.
Dann sollten Sie das "as" Schlüsselwort.
z.B.
TForm t = c as TForm.
Dann können Sie
Nicht kombinieren, wie mit ist, weil es eine doppelte Prüfung.
Oder
oder einfacher
==
). Im Objekt-oder orientierte Sprachen mit Vererbung, es sei denn, Sie wissen, dass Ihre spezifische Art wird nie vererbt werden, von beispielsweise einemsealed
Klasse. Auch: Nutzung von ternär Rückkehr (statisch/konstant), Boolesche Werte mich stört, ich wäre weniger Mühe, wenn es einswitch
- Anweisung.