Pergunta

Este novo recurso é muito conveniente.

Ultimamente eu ler o documento do "Microsoft All-In-One Código Framework", e menciona que: "Parâmetros Opcionais" não é Compatível com CLS.

Então, eu testei usando "Parâmetros Opcionais" em uma API pública, e ligado o FxCop, então eu compilado e o FxCop não se queixa de nada.Na média, enquanto, o FxCop relataram um aviso quando eu adicionar uma API que tem uint como seu tipo de retorno.

Então agora eu estou confusa, é "Parâmetros Opcionais" CLS-Compatível ou não?

E qual é a melhor maneira de descobrir se um novo recurso de linguagem é Compatível com CLS ou não?

Foi útil?

Solução

Argumentos opcionais são "ordenados" em conformidade com CLs. Os métodos com argumentos opcionais são legais e podem ser compilados com sucesso com o atributo CLSCompliant, mas chamadores desses métodos não precisam necessariamente levar em conta os valores de parâmetros padrão ou o atributo opcional. (Nesse caso, esses métodos se comportariam exatamente da mesma maneira que métodos padrão, exigindo que todos os argumentos sejam declarados explicitamente no local de chamada.)

.

Métodos que usam parâmetros padrão são permitidos sob a linguagem comum Especificação (CLS); No entanto, o CLS Permite que os compiladores ignorem os valores que são atribuídos a esses parâmetros. Código que é escrito para compiladores que ignoram os valores do parâmetro padrão deve explicitamente fornecer argumentos para Cada parâmetro padrão. Manter o comportamento que você quer em frente linguagens de programação, métodos que Use os parâmetros padrão devem ser substituído por sobrecargas de métodos que Forneça os parâmetros padrão.

(retirado da documentação para "CA1026: Os parâmetros padrão não devem ser usados" . )

Outras dicas

Eu interpretar a sua pergunta para ser sobre Argumentos Opcionais.

Se sim, então eu acredito que eles são Compatíveis com CLS, e você pode verificar usando o CLSCompliant atributo:

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());
        }
    }
}

Isso compila sem avisos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top