Was ist der Rückgabetyp eines Konstruktors in C #?
Habe ich diese Frage für Java auf diese link
Bekam ich einige Antworten in java.Jetzt will ich es wissen in C#.
Wie wir wissen, das wir nicht haben, fügen Sie alle return-Typ in einen C# - Konstruktor.
class Sample{
.....
Sample(){
........
}
}
In Objective C, wenn wir erstellen einen Konstruktor gibt einen Zeiger auf seine Klasse. Aber es ist nicht zwingend, denke ich.
AClass *anObject = [[AClass alloc] init];//init is the constructor with return type a pointer to AClass
Ähnlich, Ist der Konstruktor konvertiert eine Methode, die einen Verweis auf die eigene Klasse??
Wie diese:
class Sample{
.....
Sample Sample(){
........
return this;
}
}
Weiß der compiler fügen Sie einen Rückgabetyp eine Referenz auf gleichen Klasse an den Konstruktor?
Was ist ein Konstruktor?
Jede Bezugnahme auf die Studie?
InformationsquelleAutor der Frage sonu thomas | 2012-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entsprechend der C# 4.0 Sprache SpezifikationAbschnitt 1.6:
Es ist die
new
Betreiber, der verantwortlich ist, der Zuweisung von Speicher, der übergabe einer Referenz der neu zugewiesenen Objekt im Konstruktor, und dann wieder ein Verweis auf die Instanz. Dieser Mechanismus wird auch in Abschnitt 7.6.10.1:Dies würde bedeuten, dass der Konstruktor per se hat keinen Rückgabe-Typ (
void
).InformationsquelleAutor der Antwort InBetween
Dazwischen die Antwort richtig ist. Auch ich bin nicht einverstanden mit dem, was diskutiert wurde in der MSDN-forum. Betrachten wir ein sehr einfaches Codebeispiel wie folgt:
und die entsprechende IL:
dann wird es sofort klar, dass die .ctor gibt
void
. (Dies kann auch leicht gesehen, wenn Sie versuchen zurückgeben, etwas von dem Konstruktor, d.h. wenn Sie etwas tun, wiepublic A() { return this; }
der compiler wird sich beschweren, und sagen Sie etwas wie "Da A() gibt void zurück, ein Schlüsselwort return darf nicht befolgt werden, indem ein Objekt-Ausdruck.")Weiter: Sie können sehen, dass dieser Ausdruck
new A()
übersetzt wird der folgende IL:newobj UserQuery+A..ctor
. Die "Common Language Infrastructure Reference", sagt das folgende übernewobj
(Abschnitt 4.20):(Durch Vergleich mit Objective-C: neue/newobj ist die analog zu den
alloc
Nachricht und den Konstruktor der analogen zurinit
Nachricht.)Also es ist wirklich die
new
operator liefert eine Referenz auf das neu konstruierte Objekt, nicht den Konstruktor selbst.InformationsquelleAutor der Antwort afrischke
Es hängt davon ab, wie man es betrachtet.
"Zurück geben" wird, wie viel konzeptionelle als alles andere.
Auf der Ebene der Semantik, bei dem C# drückt ein Programmierer Absicht, Konstruktoren haben keine Rückgabewerte. Sie selbst haben nicht
void
. Sie habe nicht mehr bekam eine Rückkehr geben, als Sie tun.IL diese Konstruktoren erstellt werden, haben einen Rückgabetyp
void
.Wenn man sich auf eine
ConstructorInfo
erhalten Sie ein Objekt vom Typ in Frage (auch wenn die Art der Verzinsung, die berufen istobject
und Sie haben zu werfen, um den Typ betrifft).Ist die nächste Sache, eine konkrete Bedeutung zurück, ist die details, wie der stack manipuliert wird, indem der Konstruktor aufgerufen wird. Hier aber könnte man argumentieren, dass, während ein Referenz-Typ "gibt" ist ein Verweis auf den entsprechenden Typ, da es Orten der Wert in dem Stapel, den Wert-Typ nicht, da es manipuliert die Werte, die bereits auf dem stack. Oder man könnte einfach argumentieren, dass sowohl die Umsetzung der details, und nicht wirklich die Beantwortung der Frage an alle.
"Doesn' T haben ein Rückgabetyp" ist vermutlich die "C#ish" der oben genannten Möglichkeiten zu betrachten, die Frage zu stellen.
InformationsquelleAutor der Antwort Jon Hanna