День сто пятьдесят девятый. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по .NET
4. Что такое Общеязыковая Спецификация (CLS)?
.NET Framework не зависит от языка. Это означает, что как разработчик вы можете писать на одном из множества языков, поддерживаемых .NET Framework, таких как C#, C++/CLI, Eiffel, F#, IronPython, IronRuby, PowerBuilder, Visual Basic и т.п. Вы можете получить доступ к типам и членам библиотек классов, разработанных для .NET Framework, не зная языка, на котором они были изначально написаны, и не следуя никаким соглашениям исходного языка. Если вы разработчик компонента, доступ к вашему компоненту может получить любое приложение .NET Framework независимо от его языка.
Чтобы полностью взаимодействовать с другими объектами, написанными на любом языке, объекты должны предоставлять вызывающим их объектам только те функции, которые являются общими для всех языков. Этот общий набор функций определяется Общеязыковой Спецификацией (CLS), которая представляет собой набор правил, применимых к сгенерированным сборкам.
Если ваш компонент соответствует CLS, он гарантированно совместим с ней и доступен из кода в сборках, написанных на любом языке программирования, который поддерживает CLS. Чтобы создать компонент, который не зависит от языка, вам нужно применить правила соответствия CLS только к общедоступному интерфейсу вашего компонента. Ваша приватная реализация не обязана соответствовать спецификации.
Чтобы сообщить компилятору, что ваша сборка должна соответствовать CLS при компиляции, нужно применить атрибут
Самые часто задаваемые вопросы на собеседовании по .NET
4. Что такое Общеязыковая Спецификация (CLS)?
.NET Framework не зависит от языка. Это означает, что как разработчик вы можете писать на одном из множества языков, поддерживаемых .NET Framework, таких как C#, C++/CLI, Eiffel, F#, IronPython, IronRuby, PowerBuilder, Visual Basic и т.п. Вы можете получить доступ к типам и членам библиотек классов, разработанных для .NET Framework, не зная языка, на котором они были изначально написаны, и не следуя никаким соглашениям исходного языка. Если вы разработчик компонента, доступ к вашему компоненту может получить любое приложение .NET Framework независимо от его языка.
Чтобы полностью взаимодействовать с другими объектами, написанными на любом языке, объекты должны предоставлять вызывающим их объектам только те функции, которые являются общими для всех языков. Этот общий набор функций определяется Общеязыковой Спецификацией (CLS), которая представляет собой набор правил, применимых к сгенерированным сборкам.
Если ваш компонент соответствует CLS, он гарантированно совместим с ней и доступен из кода в сборках, написанных на любом языке программирования, который поддерживает CLS. Чтобы создать компонент, который не зависит от языка, вам нужно применить правила соответствия CLS только к общедоступному интерфейсу вашего компонента. Ваша приватная реализация не обязана соответствовать спецификации.
Чтобы сообщить компилятору, что ваша сборка должна соответствовать CLS при компиляции, нужно применить атрибут
CLSCompliant
. Например:using System;Попытка компиляции этого примера отобразит предупреждение компилятора: warning CS3003: Type of 'Person.Age' is not CLS-compliant (Тип 'Person.Age' не совместим с CLS). Вы можете сделать класс
[assembly: CLSCompliant(true)]
public class Person
{
private UInt16 _age = 0;
public UInt16 Age
{ get { return _age; } }
}
Person
совместимым с CLS, изменив тип свойства Age
с UInt16
на Int16
, которое является CLS-совместимым 16-разрядным целым числом со знаком. Вам не нужно менять тип приватного поля _age
:using System;Источник: https://docs.microsoft.com/en-us/dotnet/standard/language-independence-and-language-independent-components
[assembly: CLSCompliant(true)]
public class Person
{
private Int16 _age = 0;
public Int16 Age { get { return _age; } }
}