3

我似乎无法理解 .NET 的这些支柱。

4

5 回答 5

2

CTS (Common Type System) 所以你可以说 CTS 描述了类型是如何在运行时声明、使用和管理的,并促进了跨语言集成、类型安全和高性能代码执行。

CLS(公共语言规范) 公共语言规范 (CLS) 是语言设计者和类库设计者之间的协议,用于使用所有语言都必须遵循的基本语言特性的公共子集。

如图所示,CLS 是 CTS 的子集

替代文字 http://www.microsoft.com/taiwan/msdn/columns/DoNet/images/NET_CTS1.gif

于 2010-06-05T12:14:18.647 回答
2

通用类型系统

CTS 是描述类型属性的正式规范:

  • 在 IL 中应该如何布局类型。
  • 每种类型可以包含 0 个或多个以下成员:属性、字段、方法和事件。
  • 访问修饰符(和 C# 等效项):private(私有)、family(受保护)、family and assembly (N/A)、assembly(无修饰符/内部)、family or assembly(受保护内部)、public(公共)
  • 类型继承,虚方法
  • 每种类型都必须继承自 System.Object
  • 每种语言仅实现 CTS 功能的一个子集。

通用语言规范

CLS 在 IL 级别促进 .NET 语言之间的互操作性:

  • 它是一个编译器规范,用于确定编译器必须发出什么 IL,以使代码在 .NET 语言之间可互操作。
  • CLS 描述了一组通用的功能,程序可以使用这些功能,并且仍然可以与用其他 .NET 语言编写的程序进行互操作。
  • CLS 功能是 CTS 功能的子集。
  • 仅当您希望以多种语言编写程序时,CLS 才重要。
  • 需要注意的重要一点是,CLS 必须仅由标记为公共的代码片段遵守,因为这些是唯一可用于其他程序的代码。
  • 如果我们用 [assembly: CLSCompliant(true)] 属性注释代码,那么编译器将检查代码是否符合 CLS。

例如:

  • CLS 声明成员名称不能区分大小写:因此Foo()foo()是同一件事。
  • unsigned int 不能使用,因为它不是由所有 .NET 语言实现的
于 2019-01-09T10:30:18.230 回答
0

如前所述,CLS 是 CTS 的子集。但是这些术语的实际定义还有很多。

我建议通过 C# 阅读 CLR

于 2010-06-05T20:07:26.563 回答
0

一些例子在这里肯定会有所帮助。

不符合 CLS 的关键之一是无符号数(例如,uint)。另一个是函数指针(委托)。如果它在线路的两端都没有意义,那么它就不是“常见的”;CLS 定义了一组通用类型,这些类型不仅可以在 CLR 中使用,而且还可以在某些通用且明确指定的互操作场景中使用。

如果要强制执行 CLS 合规性,可以通过将“CLSCompliant”属性添加到项目中的 assemblyinfo.cs 文件来将其添加到程序集。

[assembly: CLSCompliant(true)]

您还可以将其添加为类的属性。

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

执行这些操作将导致 C# 编译器(或 VB,在属性上具有适当的 VB 语法)引发违反 CLS 合规性的编译错误。

此外,将 [ScriptService] 和 [ScriptMethod] 属性添加到 Web 服务 (.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
于 2010-06-05T20:25:01.007 回答
0

CLS

CLS 代表通用语言规范,它是 CTS 的子集。它定义了在 .NET 框架下运行的每种语言必须遵循的一组规则和限制。遵循这些规则的语言被称为符合 CLS。简而言之,CLS 支持跨语言集成或互操作性。

例如

如果我们谈论 C# 和 VB.NET,那么在 C# 中,每条语句都必须以分号结尾。它也称为语句终止符,但在 VB.NET 中,每个语句不应以分号 (;) 结尾。上述例子的解释

所以你必须遵循的这些语法规则因语言而异,但 CLR 可以理解所有语言语法,因为在 .NET 中,每种语言在编译后都会转换为 MSIL 代码,而 MSIL 代码是 CLR 的语言规范。

中旅

通用类型系统 (CTS) 描述了托管代码可以使用的数据类型。CTS 定义了如何在运行时声明、使用和管理这些类型。它有助于跨语言集成、类型安全和高性能代码执行。CTS 中定义的规则可用于定义您自己的类和值。

或者我们也可以这样理解,

CTS 处理数据类型。所以这里我们有几种语言,每种语言都有自己的数据类型,一种语言的数据类型不能被其他语言理解,但 .NET Framework 语言可以理解所有的数据类型。

于 2022-01-27T01:35:09.547 回答