Definition einer Methodensignatur?
Was ist die korrekte definition der Signatur der Methode (oder eine Signatur einer Methode)?
Auf google finde ich verschiedene Definitionen:
Es ist die Kombination aus Methodenname und die Parameterliste
Bedeutet das, dass method signature = method name + argument list
? Dann sehe ich nicht den Unterschied zwischen "Methode" und "Signatur der Methode".
Wenn ich eine Methode:
public void Foo(int x, int y) { ... }
Wäre meine Methode-Signatur eine der folgenden Aktionen aus, oder nicht?
- Foo
- Foo(int, int)
- Foo(int x, int y)
- Foo(34, 78)
Wie bin ich wohl zu Antworten, wenn jemand Fragen mich, was ist die Signatur der Methode von der Methode??
InformationsquelleAutor der Frage KMC | 2011-12-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine Reihe von richtige Antwort hier definieren Sie die Signatur der Methode wie der name der Methode, generische Dimension, formale parameter Dimension und die formalen parameter-Typen und-Arten, aber nicht der Rückgabetyp oder das "params" - modifier.
Obwohl das stimmt, es sind einige Feinheiten hier. Der Weg die Sprache C# definiert die Methodensignatur unterscheidet sich von der Art der CLR definiert die Signatur der Methode, und kann dazu führen, dass einige interessante Probleme, wenn die Interoperabilität zwischen C# und anderen Sprachen.
Für die CLR, eine Methodensignatur besteht aus dem Namen der Methode angegeben, generische Dimension, formale parameter stelligkeit, formale parameter, Typen und Arten, und zurück geben. Es ist also der erste Unterschied; die CLR-Ansicht zurück geben.
Die CLR auch nicht als "out" und "ref" werden verschiedene formale parameter Arten; C#.
Die CLR hat auch ein Interessantes feature namens "optional und müssen Typmodifizierer", in der Regel als "modopts" und "modreqs". Es ist möglich, Anmerkungen ein Typ in einer Methodensignatur mit eine andere Art , sagt Sie über die "main" - Typ. Zum Beispiel in C++ das sind zwei verschiedene Signaturen:
Beide Signaturen definieren Sie eine Methode M ist ein parameter vom Typ "Referenz auf K". Weil aber die erste ist eine const-Referenz und die zweite nicht, die C++ - Sprache ist der Auffassung, dass diese unterschiedlichen Signaturen. Die CLR implementiert dies, indem die C++/CIL-compiler ausstrahlen modopt für eine spezielle "dies ist const" Typ der formalen parameter geben.
Gibt es keine Möglichkeit zu Lesen oder ein mod in C#, aber der C# compiler trotzdem weiß, über Sie und werde Sie Ehren in gewisser Weise. Zum Beispiel, wenn Sie hatte eine öffentliche virtuelle Methode deklariert in C++/CIL wie:
und Sie überschreiben in einer abgeleiteten Klasse in C# geschrieben, der C# - compiler nicht durchzusetzen const-Korrektheit für Sie; der C# - compiler hat keine Ahnung, was das const modopt bedeutet. Aber der C# - compiler wird sichergestellt, dass die überschreibende Methode emittiert wird in den Metadaten mit der modopt im Ort. Dies ist notwendig, da die CLR erfordert Signaturen überschreiben und überschriebene Methoden übereinstimmen; der compiler hat zu gehorchen, die CLR-Regeln für die Signatur-matching, nicht die C# - Regeln.
InformationsquelleAutor der Antwort Eric Lippert
Aus der MSDN:
Ist der wichtige Teil hier ist, dass der Rückgabetyp einer Methode gehört nicht zu seiner Unterschrift. So können Sie nicht überladen von Methoden, die unterscheiden sich nur durch den Rückgabetyp!
InformationsquelleAutor der Antwort Robert Hegner
Signatur der Methode ist die Menge der Attribute einer Methode, die ein compiler zur Identifizierung der Methode.
Den attrbutes sind: name der Methode, Anzahl der Parameter, parameter-Typ und Reihenfolge der Parameter.
Beispiel den folgenden Signaturen:
Alle diese methos sind Verschieden, und wenn Sie rufen, die im code der compiler kann daraus schließen, welche Methode sind Sie Absicht ausführen mit der Signatur der Methode.
Vergessen Sie nicht, den Umfang der Methoden, die in der modularen Programmierung...
InformationsquelleAutor der Antwort jlvaquero
Die Signatur der Methode enthält folgende Elemente:
Reihenfolge der Parameter.
Hinweis: Der return-Typ ist nicht Teil der Signatur.
InformationsquelleAutor der Antwort Prateek
In deinem Beispiel oben die Signatur der Methode ist Foo(int x, int y). Dies ist wichtig zu wissen, denn in Sprachen, die es erlauben, die Methode überladen (wie C# und Java), die Methode name wird der gleiche sein, aber die Signatur muß unterschiedlich sein.
InformationsquelleAutor der Antwort BMB
Abschnitt 3.6 der C# Language Specification (v 4.0) bietet die präzise Antwort bezüglich Signaturen:
InformationsquelleAutor der Antwort Mike Cowan
MSDN-Artikel "Methoden (C# - Programmierhandbuch)"
sagt:
Weiter, was ich noch nicht gesehen unter den anderen Antworten:
InformationsquelleAutor der Antwort Gennady Vanin Геннадий Ванин