架构师_程序员

查看: 46|回复: 0

[资料] .NET 之 (CLS)公共语言规范

[复制链接]
发表于 6 天前 | 显示全部楼层
.NET 是独立的语言。 这意味着,作为开发人员,你可以使用面向 .NET 的多种语言(例如,C#、C++/CLI、Eiffel、F#、IronPython、IronRuby、PowerBuilder、Visual Basic、Visual COBOL 以及 Windows PowerShell)之一进行开发。 可访问针对 .NET 开发的类库的类型和成员,而不必了解它们的初始编写语言,也不必遵循任何原始语言的约定。 如果你是组件开发人员,无论组件采用哪种语言,均可由任何 .NET 应用访问。

如果你的组件符合公共语言规范,则保证其符合 CLS 并可通过支持 CLS 的任何编程语言编写的程序集中的代码对其进行访问。 你可以通过将 CLSCompliantAttribute 特性应用于源代码来确定自己的组件在编译时是否符合公共语言规范。

公共语言规范讨论 CLS 遵从性的每个规则,因为它应用于使用者(以编程方式访问符合 CLS 的组件的开发人员)、框架(使用语言编译器创建符合 CLS 的库的开发人员)和扩展人员(创建可创建符合 CLS 的组件的语言编译器或代码分析器等工具的开发人员)。
程序编译时默认不会检查代码是否符合 CLS 要求,但是如果你的可以是公开的(代码共享、Nuget 发布等),则建议使用使用 [assembly: CLSCompliant(true)] ,指明你的库符合 CLS 要求

参考资料:

https://docs.microsoft.com/en-us/dotnet/standard/language-independence-and-language-independent-components
https://docs.microsoft.com/zh-cn/dotnet/api/system.clscompliantattribute?view=net-5.0
https://www.ecma-international.org/publications/standards/Ecma-335.htm

通俗易懂来讲:

你用手也能抓饭吃,你用勺子也能吃饭,都没有任何问题,但是,用手吃饭不符合卫生标准或规范。CLS 就是一个协议规范,虽然程序集不会报错,也不影响正常使用,但是,你开发的代码某些类型、参数等不符合标准而已。

使用 CLS

我们在 AssemblyInfo.cs 文件,添加如下代码:

cls.jpg

它将应用到整个程序集。

如不设置,在添加该特性到对象的时候,可能会报错如下:

由于程序集没有 CLSCompliant 特性,因此“A.Test”不需要 CLSCompliant 特性

测试代码如下,然后重新编译:

“A.Test”的类型不符合 CLS

微信截图_20210111113847.jpg

可以看到有两处警告,点击警告项会跳转到具体的行号,说明我们这行代码不符合 CLS 规范,然后,自己修正即可。

如果该行虽然不符合 CLS 规范,但是修改后会影响程序的正确运行,但是又不想让vs发出警告,可以在该字段、类上面添加如下特性:



这样就不会发出此警告了。

(完)





上一篇:Entity Framework 查询优化之 WITH(NOLOCK)
下一篇:.NET/C# 获取当前应用状态(CPU、线程、GC)
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2021-1-17 10:54

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表