Каковы отношения между CTS и CLS? - PullRequest
3 голосов
/ 05 июня 2010

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

Ответы [ 4 ]

1 голос
/ 05 июня 2010

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

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

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

альтернативный текст http://www.microsoft.com/taiwan/msdn/columns/DoNet/images/NET_CTS1.gif

0 голосов
/ 09 января 2019

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

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

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

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

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

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

Например:

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

Некоторые примеры наверняка помогут здесь.

Одна из ключевых вещей, которая не совместима с 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
0 голосов
/ 06 июня 2010

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

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

...