Ist das neue Merkmal von C # 4.0 - "Optionale Parameter" CLS-konform?
-
12-11-2019 - |
Frage
Diese neue Funktion ist wirklich bequem.
In letzter Zeit las ich das Dokument des "Microsoft All-In-One-Code-Frameworks", und es erwähnt, dass "Optionale Parameter" nicht CLS-kompatibel ist.
Also habe ich es getestet, indem ich in einer öffentlichen API mit "optionaler Parameter" in einer öffentlichen API mithilfe von FXCOP eingeschaltet wurde, und dann habe ich kompiliert und FXCOP hat sich über nichts beschweren.Mittlerweile meldete FXCOP eine Warnung, wenn ich eine API-API-Datei hinzufüge, die als Rendite-Typ verwendet wird.
So bin ich jetzt verwirrt, ist "optionale Parameter" CLS-kompatibel oder nicht?
und was ist der beste Weg, um herauszufinden, ob eine neue Sprachfunktion CLS-kompatibel ist oder nicht?
Lösung
Optionale Argumente sind "Art" CLS-konform. Methoden mit optionalen Argumenten sind legal und können erfolgreich mit dem generationspoDicetagcode-Attribut, , aber Anrufer dieser Methoden müssen nicht unbedingt die Standardparameterwerte oder das optionale Attribut berücksichtigen. (In diesem Fall verhalten sich diese Methoden genau auf dieselbe Weise wie Standardmethoden, wodurch alle Argumente explizit an der Anrufstelle angegeben werden.)
-Methoden, die Standardparameter verwenden sind unter der gemeinsamen Sprache erlaubt Spezifikation (CLS); Die CLS ermöglicht es Compilern, die Werte zu ignorieren die diesen Parametern zugewiesen werden. Code, der für Compiler geschrieben ist das ignorieren Standardparameterwerte Muss ausdrücklich Argumente anbieten Jeder Standardparameter. Aufrecht erhalten das Verhalten, das Sie wünschen Programmiersprachen, Methoden, die Standardparameter verwenden sollten ersetzt mit den Methodenüberlastungen Geben Sie die Standardparameter an.
(aus der Dokumentation für "CA1026: Standardparameter sollten nicht verwendet werden" . )
Andere Tipps
Ich interpretiere Ihre Frage, um etwa optionale Argumente .
Wenn ja, dann glaube ich, dass sie CLS-kompatibel sind, und Sie können unter Verwendung des clscomppliant Attribut: generasacodicetagpre.
Dies kompiliert ohne Warnungen.
werfen Sie einen Blick auf die cls specs .
Von Seite 41:
Die Varar-Einschränkung kann eingeschlossen sein, um anzuzeigen, dass alle Argumente an diesem Punkt optional sind.Wann Es erscheint, dass das anrufende Übereinkommen eine, die variable Argumentlisten unterstützt.
aber die Box rechts unten sagt:
cls Regel 15: Die Varar-Einschränkung ist nicht Teil der CLS und das einzige anrufende Übereinkommen, das von der CLS ist die standardgeführte Anrufkonvention