Freigeben über


Beheben Sie Fehler und Warnungen, die sich auf die Überladungsauflösung auswirken.

In diesem Artikel werden die folgenden Compilerfehler behandelt:

  • CS0034 - Der Operator ist bei Operanden vom Typ 'type1' und 'type2' mehrdeutig.
  • CS0035 - Der Operator ist bei einem Operanden vom Typ 'type' mehrdeutig.
  • CS0111 - Der Typ definiert bereits einen Member namens 'name' mit den gleichen Parametertypen.
  • CS0121 - Der Aufruf ist zwischen den folgenden Methoden oder Eigenschaften mehrdeutig:
  • CS0457 - Mehrdeutige benutzerdefinierte Konvertierungen beim Konvertieren von 'type1' in 'type2'
  • CS0663 - Kann keine überladenen Methoden definieren, die sich nur in ref und out unterscheiden.
  • CS1007 - Der Eigenschaftenaccessor ist bereits definiert.
  • CS1019 - Überladbarer unärer Operator erwartet
  • CS1020 - Überladbarer binärer Operator erwartet
  • CS1501 - Keine Überladung für die Methode 'method' nimmt 'number' Argumente an.
  • CS1534 - Der überladene binäre Operator 'operator' nimmt zwei Parameter an.
  • CS1535 - Der überladene unäre Operator 'operator' nimmt einen Parameter an.
  • CS1928 - 'Type' enthält keine Definition für 'method', und die Überladung der optimalen Erweiterungsmethode 'method' enthält einige ungültige Argumente.
  • CS1929 - 'TypeA' enthält keine Definition für 'method', und die Überladung der optimalen Erweiterungsmethode 'TypeB.method' erfordert einen Empfänger vom Typ 'TypeC'.
  • CS8315 - Der Operator ist bei Operanden mehrdeutig.
  • CS9261 - 'OverloadResolutionPriorityAttribute' kann nicht für einen überschreibenden Member verwendet werden.
  • CS9262 - 'OverloadResolutionPriorityAttribute' kann nicht für diesen Member verwendet werden.

Darüber hinaus wird die folgende Compilerwarnung angezeigt:

  • CS3006 - Die überladene Methode 'method' weicht nur hinsichtlich ref, out oder hinsichtlich des Arrayrangs ab und ist nicht CLS-kompatibel.

Falsche Überladungsdefinition

  • CS0663 - Kann keine überladenen Methoden definieren, die sich nur in ref und out unterscheiden.
  • CS1019 - Überladbarer unärer Operator erwartet
  • CS1020 - Überladbarer binärer Operator erwartet
  • CS1534 - Der überladene binäre Operator 'operator' nimmt zwei Parameter an.
  • CS1535 - Der überladene unäre Operator 'operator' nimmt einen Parameter an.

Darüber hinaus wird die folgende Compilerwarnung angezeigt:

  • CS3006 - Die überladene Methode 'method' weicht nur hinsichtlich ref, out oder hinsichtlich des Arrayrangs ab und ist nicht CLS-kompatibel.

Wenn Sie überladene Operatoren in Ihrer Klasse erstellen, muss die Signatur mit der Anzahl der Parameter übereinstimmen, die für diesen Operator erforderlich sind. Sie haben die falsche Anzahl von Parametern in der Operatordefinition.

Darüber hinaus müssen Überladungsoperatoren den definierten Operatornamen verwenden. Die einzige Ausnahme ist, wenn Sie einen Konvertierungsoperator erstellen, bei dem der Operatorname dem Rückgabetyp der Konvertierung entspricht.

Doppelte Überladungen definiert

  • CS0111 - Der Typ definiert bereits einen Member namens 'name' mit den gleichen Parametertypen.
  • CS1007 - Der Eigenschaftenaccessor ist bereits definiert.

Diese Fehler deuten darauf hin, dass Sie Überladungen erstellt haben, die nicht unterschiedlich sind. Häufige Ursachen:

  • Die übereinstimmenden Parametertypen weisen eine Identitätskonvertierung auf. Beispiel: M(dynamic) und M(object) oder M2(string) und M2(string?)
  • Die übereinstimmenden Parametertypen unterscheiden sich nur im Verweismodifizierer. Beispiel: M(ref int) und M(out int).
  • Sie haben sowohl einen init- als auch set-Accessor in eine Eigenschaft aufgenommen.

Keine Überladung gefunden

  • CS1501 - Keine Überladung für die Methode 'method' nimmt 'number' Argumente an.
  • CS1928 - 'Type' enthält keine Definition für 'method', und die Überladung der optimalen Erweiterungsmethode 'method' enthält einige ungültige Argumente.
  • CS1929 - 'TypeA' enthält keine Definition für 'method', und die Überladung der optimalen Erweiterungsmethode 'TypeB.method' erfordert einen Empfänger vom Typ 'TypeC'.

Ihr Code ruft eine Methode auf, bei der der Name vorhanden ist. Einige Argumente sind jedoch falsch, oder Sie haben die falsche Anzahl von Argumenten verwendet. Wenn Sie eine Erweiterungsmethode aufrufen, befindet sich die Klasse, in der sie enthalten ist, möglicherweise in einem nicht importierten Namespace.

Hinweis

Der Fehler CS1928 wird nicht von den neuesten Compilern verwendet. Neue Compiler verwenden ausschließlich CS1929.

Mehrdeutige Überladungen

  • CS0034 - Der Operator ist bei Operanden vom Typ 'type1' und 'type2' mehrdeutig.
  • CS0035 - Der Operator ist bei einem Operanden vom Typ 'type' mehrdeutig.
  • CS0121 - Der Aufruf ist zwischen den folgenden Methoden oder Eigenschaften mehrdeutig:
  • CS0457 - Mehrdeutige benutzerdefinierte Konvertierungen beim Konvertieren von 'type1' in 'type2'
  • CS8315 - Der Operator ist bei Operanden mehrdeutig.

Diese Fehler deuten darauf hin, dass es keine bessere Überladung gibt als andere. Es gibt mehrere mögliche Ursachen für diese Fehler:

  • Für die einzelnen Parameter sind unterschiedliche Argumente besser. Eines kann genau übereinstimmen, während das andere eine Konvertierung erfordert:

      void M(int a, double b) {    }
      void M(double a, int b) {}
    
      M(1, 1); // ambiguous
    
  • Mehrere benutzerdefinierte Konvertierungsoperatoren kommen in Frage. Konvertierungsoperatoren können im Quelltyp, in dessen Basistypen, im Zieltyp oder in dessen Basistypen deklariert werden. Wenn ein Konvertierungsoperator in mehreren Typen definiert wurde, kann der Compiler nicht auswählen.

  • Mehrere Konvertierungsoperatoren können eine kompatible Konvertierung durchführen.

  • Mindestens ein Argument verwendet default (nicht default(T)), und mehrere Typen können ausgewählt werden.

In den meisten Fällen kann durch Hinzufügen einer expliziten Umwandlung angegeben werden, welche Überladung ausgewählt werden soll.

Priorität der Überladungsauflösung

  • CS9261 - 'OverloadResolutionPriorityAttribute' kann nicht für einen überschreibenden Member verwendet werden.
  • CS9262 - 'OverloadResolutionPriorityAttribute' kann nicht für diesen Member verwendet werden.

Ihr Code hat gegen die Regeln verstoßen, indem OverloadResolutionPriorityAttribute verwendet wurde, um eine Überladung gegenüber einer anderen vorzuziehen. Sie können OverloadResolutionPriorityAttribute nicht auf die folgenden Methodentypen anwenden:

  • Indexer-fremde Eigenschaften
  • Eigenschaft, Indexer oder Ereignisaccessoren
  • Konvertierungsoperatoren
  • Lambdaausdrücke
  • Local functions (Lokale Funktionen)
  • Finalizer
  • Statische Konstruktoren

Darüber hinaus können Sie OverloadResolutionPriorityAttribute nicht auf override eines Members vom Typ virtual oder abstract anwenden. Der Compiler verwendet den Wert aus der Basistypdeklaration.