Pregunta

Esta nueva característica es realmente conveniente.

últimamente leí el documento del "Marco de código de Microsoft All-in-One", y menciona que los "parámetros opcionales" no cumplen con CLS.

Así que lo probé mediante el uso de "parámetros opcionales" en una API pública, y encendí FXCOP, luego compilé y FXCOP no se quejó de nada.A la medida en que, FXCOP informó una advertencia cuando agrego una API que tiene uinta como su tipo de devolución.

Así que ahora estoy confundido, ¿es "Parámetros opcionales" CLS-Cumple o no?

¿Y cuál es la mejor manera de averiguar si una nueva característica de idioma es CLS-Cumple o no?

¿Fue útil?

Solución

Los argumentos opcionales son "tipo de" compatible con CLS. Los métodos con los argumentos opcionales son legales y se pueden compilar con éxito con el atributo CLSCompliant, pero las personas que llaman de esos métodos, no necesariamente necesitan tener en cuenta los valores de parámetros predeterminados o el atributo opcional. (En cuyo caso, esos métodos se comportarían exactamente de la misma manera que los métodos estándar, lo que requiere que todos los argumentos se indique explícitamente en el sitio de llamadas).

Métodos que usan parámetros predeterminados están permitidos bajo el lenguaje común Especificación (CLS); Sin embargo, el CLS Permite que los compiladores ignoren los valores. que se asignan a estos parámetros. Código que está escrito para los compiladores. que ignore los valores de parámetros predeterminados debe proporcionar explícitamente argumentos para Cada parámetro predeterminado. Mantener el comportamiento que quieres a través Lenguajes de programación, métodos que Use los parámetros predeterminados deben ser reemplazado con sobrecargas de métodos que Proporcionar los parámetros predeterminados.

(tomada de la documentación para "CA1026: Los parámetros predeterminados no se deben usar" . )

Otros consejos

Interpreto su pregunta a ser sobre Argumentos opcionales .

Si es así, entonces creo que son compatibles con CLS y puede consultar utilizando el CLSComplaciante 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());
        }
    }
}

Esto compila con ninguna advertencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top