Каковы отношения между CTS и CLS?

Я просто не могу понять эти столпы.NET.

5 ответов

Решение

CTS (Common Type System) Таким образом, вы можете сказать, что CTS описывает, как типы объявляются, используются и управляются во время выполнения и облегчают межязыковую интеграцию, безопасность типов и выполнение кода с высокой производительностью.

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

Как вы можете видеть на изображении, CLS является подмножеством CTS

http://www.microsoft.com/taiwan/msdn/columns/DoNet/images/NET_CTS1.gif

Система общего типа

CTS - это формальная спецификация, описывающая свойства типа:

  • Как типы должны быть выложены в IL.
  • Каждый тип может состоять из 0 или более следующих членов: свойство, поле, метод и событие.
  • Модификаторы доступа (и эквиваленты C#): частный (частный), семейный (защищенный), семейный и сборочный (нет данных), сборочный (без модификатора / внутренний), семейный или сборочный (защищенный внутренний), общедоступный (общедоступный)
  • Наследование типов, виртуальные методы
  • Каждый тип должен наследоваться от System.Object
  • Каждый язык реализует только подмножество функций CTS.

Спецификация общего языка

CLS облегчает взаимодействие между языками.NET на уровне IL:

  • Это спецификация компилятора, которая определяет, какой IL должен генерировать компилятор, чтобы код мог взаимодействовать между языками.NET.
  • CLS описывает общий набор функций, которые программе разрешено использовать и которые по-прежнему могут взаимодействовать с программами, написанными на других языках.NET.
  • Функции CLS являются подмножеством функций CTS.
  • CLS важен, только если вы хотите писать свои программы на нескольких языках.
  • Важно отметить, что CLS должны соблюдаться только частями кода, помеченными как общедоступные, поскольку они являются единственными, доступными для других программ.
  • Если мы аннотируем код с помощью атрибута [assembly: CLSCompliant(true)], то компилятор проверит, совместим ли код с CLS.

Например:

  • CLS заявляет, что имена членов не могут быть дифференцированы по регистру: таким образом Foo() а такжеfoo() это одно и то же.
  • unsigned int нельзя использовать, так как он реализован не всеми языками.NET

Как уже упоминалось, CLS является подмножеством CTS. Но есть гораздо больше в реальном определении этих терминов.

Я предлагаю читать CLR через C#.

Некоторые примеры, безусловно, помогут здесь.

Одной из ключевых вещей, которая не совместима с CLS, являются числа без знака (например, uint). Другой - это указатели на функции (делегаты). Если это не будет иметь смысла на обоих концах строки, то это не "общее"; CLS определяет набор общих типов, которые работают не только в CLR, но также в определенных общих и специфических сценариях взаимодействия.

Если вы хотите обеспечить соответствие CLS, вы можете добавить атрибут "CLSCompliant" в сборку, добавив его в файл assemblyinfo.cs в проекте.

[assembly: CLSCompliant(true)]

Вы также можете добавить его в качестве атрибута в классе.

[CLSCompliant(true)]
public class HospitalLocationEntity : EntityBase
{
    ...
}

Выполнение этих действий приведет к тому, что компилятор C# (или VB с соответствующим синтаксисом VB в атрибутах) вызовет ошибки компиляции для нарушений соответствия CLS.

Кроме того, добавление атрибутов [ScriptService] и [ScriptMethod] к веб-службам (.asmx) приведет к тому, что служба будет генерировать выходные данные службы JSON, и потребует, чтобы данные, используемые для ответов службы, были помечены как CLSCompliant на уровне классов и сборок.

<System.Web.Services.WebService()> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
<ScriptService()> _
Public Class HospitalLocationService
    Inherits System.Web.Services.WebService
    <WebMethod()> _
    <ScriptMethod()> _
    Public Function GetAll() As List(Of HospitalLocationEntity)
        Return (New HospitalLocation()).GetAll().Data
    End Function
End Class

ЦЛС

CLS расшифровывается как Common Language Specification и является подмножеством CTS. Он определяет набор правил и ограничений, которым должен следовать каждый язык, работающий в среде .NET. Языки, которые следуют этому набору правил, называются CLS-совместимыми. Проще говоря, CLS обеспечивает межъязыковую интеграцию или совместимость.

Например

если мы говорим о C# и VB.NET, то в C# каждый оператор должен заканчиваться точкой с запятой. его также называют терминатором оператора, но в VB.NET каждый оператор не должен заканчиваться точкой с запятой (;). Объяснение приведенного выше примера

Таким образом, эти правила синтаксиса, которым вы должны следовать от языка к языку, различаются, но CLR может понимать весь синтаксис языка, потому что в .NET каждый язык после компиляции преобразуется в код MSIL, а код MSIL является языковой спецификацией CLR.

КТС

Система общих типов (CTS) описывает типы данных, которые могут использоваться управляемым кодом. CTS определяет, как эти типы объявляются, используются и управляются во время выполнения. Это облегчает межъязыковую интеграцию, безопасность типов и высокопроизводительное выполнение кода. Правила, определенные в CTS, можно использовать для определения ваших собственных классов и значений.

ИЛИ мы также можем понять, например,

CTS имеет дело с типом данных. Итак, здесь у нас есть несколько языков, и каждый язык имеет свой собственный тип данных, и один тип данных языка не может быть понятен другими языками, но язык .NET Framework может понимать все типы данных.

Другие вопросы по тегам