Новая особенность C # 4.0 - «Дополнительные параметры» CLS-совместимые?

StackOverflow https://stackoverflow.com/questions/5456989

Вопрос

Эта новая функция действительно удобна.

В последнее время я прочитал документ «Microsoft All-In-One Code Framework», и упоминается, что «необязательные параметры» не совместится с CLS.

Итак, я проверил его с помощью «Дополнительные параметры» в общественном API, и включил FXCOP, то я составлен, и FXCOP не жаловался на что угодно.В то время как FXCOP сообщил о предупреждении, когда добавляю API, который имеет UINT в качестве его возврата.

Так что теперь я запутался, это "необязательные параметры" CLS-совместимые или нет?

И какой лучший способ узнать, является ли функция нового языка CLS-совместимой или нет?

Это было полезно?

Решение

Дополнительные аргументы - «Срок службы» CLS-совместимого. Методы с дополнительными аргументами являются юридическими и могут быть успешно скомпилированы с атрибутом CLSCompliant, , но абоненты , но абоненты этих методов не обязательно нужно учитывать значения параметра по умолчанию или дополнительный атрибут. (В этом случае эти методы будут вести себя точно так же, как стандартные методы, требующие, чтобы все аргументы были указаны явно на участке вызова.)

Методы, которые используют параметры по умолчанию разрешены под общим языком Спецификация (CLS); Тем не менее, CLS позволяет компиляторам игнорировать значения которые назначены на эти параметры. Код, который написан для компиляторов которые игнорируют значения параметров по умолчанию должен явно предоставлять аргументы для каждый параметр по умолчанию. Поддерживать поведение, которое вы хотите по всему языки программирования, методы, которые Используйте параметры по умолчанию должны быть заменен методом перегрузки, которые Укажите параметры по умолчанию.

(взято из документации для "CA1026: параметры по умолчанию не должны использоваться" . )

Другие советы

Я интерпретирую ваш вопрос о Дополнительные аргументы .

Если так, то я полагаю, что они являются совместимыми CLS, и вы можете проверить, используя 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());
        }
    }
}
.

Это компилирует без предупреждений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top