我似乎无法理解.NET 的这些支柱。
CTS(公共类型系统)因此,您可以说 CTS 描述了如何在运行时声明,使用和管理类型,并促进跨语言集成,类型安全和高性能代码执行。
CLS(公共语言规范)公共语言规范(CLS)是语言设计人员和类库设计人员之间达成的协议,使用所有语言都必须遵循的基本语言功能的公共子集。
正如您在图像中看到的 CLS 是 CTS 的子集
alt text http://www.microsoft.com//msdn/columns/DoNet/images/NET_CTS1.gif普通型系统
CTS 是描述类型属性的正式规范:
如何在 IL 中布局类型。
每个类型可以由 0 个或多个以下成员组成:属性、字段、方法和事件。
访问修饰符(和 C # 等效项):私有(私有),家庭(受保护),家庭和程序集(N / A),程序集(无修饰符 / 内部),家庭或程序集(受保护的内部),公共(公共)
类型继承,虚方法
每个类型必须从 System.Object 继承
每种语言仅实现 CTS 功能的子集。
通用语言规范
CLS 在 IL 级别促进了.NET 语言之间的互操作性:
它是一个编译器规范,它确定编译器必须发出什么 IL 才能使代码在.NET 语言之间可互操作。
CLS 描述了一组通用功能,允许程序使用这些功能,并且仍然可以与其他.NET 语言编写的程序互操作。
CLS 特征是 CTS 特征的子集。
只有当你想用多种语言编写程序时,CLS 才是重要的。
需要注意的重要一点是,CLS 必须仅由标记为公共的代码段遵守,因为这些是其他程序唯一可用的代码段。
如果我们用 [assembly:CLSCompliant (true)] 属性注释代码,那么编译器将检查代码是否符合 CLS。
例如:
CLS 指出,成员名称不能区分大小写:因此Foo()
和foo()
是一回事。
unsigned int 不能使用,因为它不是由所有.NET 语言实现的
如前所述,CLS 是 CTS 的子集。但是这些术语的实际定义还有很多。
我建议阅读CLR via C#。
一些例子肯定会帮助这里。
不符合 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
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(19条)