Deklarieren Sie ein Objekt kann einen beliebigen Datentyp in c#
Ich bin auf der Suche für eine Umsetzung ähnlich dem Typ 'id' in objective-c, die beliebigen Typs sein können während der Laufzeit.Ist es möglich, dass in c#?
lassen Sie mich erklären, meine Anforderung
id abc;//a common type which can hold any object during runtime
if(cond1)
{
Option1 opt1 = new Option1();//opt1 is an object of user defined class Option1
abc = opt1;
}
else if(cond2)
{
Option2 opt2 = new Option2();
abc = opt2;
}
...
Wie kann ich das gleiche in c# ?
Vielen Dank,
Nikil.
- Ich möchte hinzufügen, um ein Beispiel zu BoltClock Antwort. Seine Antwort völlig richtig. Sie können die Verwendung von " var " - Schlüsselwort überall wie var myDate = new DateTime(); var myBuilder = new StringBuilder(); ...
- Hekimoglu: Sie können das tun, aber Sie kann nicht erklären
var myVar;
allein, er muß initialisiert werden Deklaration. Ich verwirrtvar
mitobject
. - Sie verwirrt mich auch
- Ja tut mir Leid, dass.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies auf zwei Arten tun:
Ersten, Sie können erklären, die Art wie
object
. Dies ermöglicht es Ihnen, weisen Sie nichts geben. Berücksichtigen Sie jedoch, dass, wenn Sie einen Werttyp zuweisen der Objektreferenz, es wird geboxt.Beispiel:
Die zweite option, die erfordert, C# 4, ist es zu erklären, wie
dynamic
. Dies ermöglicht es Ihnen, um tatsächlich rufen Sie die Methoden und Eigenschaften des Objekts, als wenn es das "real" - Typ. Der Methodenaufruf wird zur Laufzeit scheitern, wenn es nicht vorhanden ist, aber erfolgreich, zur compile-Zeit.Beispiel:
oder ist es zu einfach?
dynamische Typen sind genau für diesen Zweck. Ihr "Typ" ist dynamisch(was offensichtlich bedeutet, dass zur Laufzeit).
Ich weiß nicht, über objective-C, aber wie es scheint, id = dynamisch.
Im wesentlichen eine dynamische Art behandelt wird wie ein "typeless" - Objekt. Es gibt keine intellisense und keine Typ-Prüfung zur compile-Zeit.
Haben Sie mehrere Möglichkeiten zu betrachten und zu
var
ist nicht einer von Ihnen.1) Stellen Sie alle Option-Klassen Erben von einer abstrakten Klasse.
2) Stellen Sie alle Ihre Option Klassen Erben von einem Interface.
3)
object
als der Typ4) Verwenden Sie einen
dynamic
ObjektEs hängt davon ab, was Sie tun möchten, die mit 'abc', die nach diesem Zeitpunkt in den code.
Erklären
object
oder verwenden Sie dendynamic
keyword wie andere sagen, oder wenn Sie wissen, ein interface oder eine Basisklasse, die alle Ihre möglichen Objekte stammen aus, mit diesem Typ:var
undobject
. +1, um Sie