Domanda

Questa nuova funzionalità è davvero conveniente.

Ultimamente Leggi il documento del "Microsoft All-in-Ons Code Framework" e menziona che "parametri opzionali" non è conforme a CLS

Così l'ho testato utilizzando "Parametri opzionali" in un'API pubblica e attivato FXCOP, quindi ho compilato e FXCOP non si lamentò di nulla.Alla media mentre, FXCOP ha segnalato un avviso quando aggiungo un'API che ha Uint come il suo tipo di ritorno.

Allora ora sono confuso, è "parametri facoltativi" conforme a CLS o no?

E qual è il modo migliore per scoprire se una nuova funzionalità della lingua è conforme a CLS o no?

È stato utile?

Soluzione

Argomenti opzionali sono "Sort-of" conforme a CLS. I metodi con argomenti opzionali sono legali e possono essere compilati con successo con l'attributo generacodictagcode, ma i chiamanti di tali metodi non devono necessariamente tenere conto dei valori dei parametri predefiniti o dell'attributo opzionale. (Nel qual caso tali metodi si comportano esattamente nello stesso modo dei metodi standard, che richiedono che tutti gli argomenti siano indicati esplicitamente nel sito di chiamata.)

.

Metodi che utilizzano parametri predefiniti sono ammessi sotto il linguaggio comune Specifiche (CL); Tuttavia, il CLS consente ai compilatori di ignorare i valori che sono assegnati a questi parametri. Codice che è scritto per i compilatori che ignora i valori dei parametri predefiniti deve esplicitamente fornire argomenti per ogni parametro predefinito. Mantenere il comportamento che vuoi Lingue di programmazione, metodi che utilizzare i parametri predefiniti dovrebbero essere sostituito con il metodo sovraccarichi che Fornire i parametri predefiniti.

(preso dalla documentazione per "ca1026: i parametri predefiniti non devono essere utilizzati" . )

Altri suggerimenti

Interpreto la tua domanda per essere di Argomenti opzionali .

Se è così, credo che siano conformi a CLS e puoi controllare utilizzando il Attributo CLSCompliant :

using System;

[assembly: CLSCompliant(true)]

namespace ConsoleApplication1
{
    public class Program
    {
        public static int Test(int val=42)
        {
            return val;
        }

        static void Main(string[] args)
        {
            System.Console.WriteLine(Test());
        }
    }
}
.

Compila senza avvertimenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top