论如何保证C#编写的类库可以正常被其他符合CLS(Common Language Specification)规范的语言引用

48 篇文章 0 订阅

CLS规范是CTS通用类型系统(Common Type System)的一个子集,符合该规范的高级语言皆可在.net平台进行互相引用,这就是为什么称.net平台是跨语言的平台。(相对称的,人都称java是跨平台的语言)

任何语言,只要你符合CLS规范,你就可以在.net平台畅通无阻。

那么,如何保证用C#编写的语言严格的符合CLS规范呢,我们下面举个栗子:

如上所示,我编写了一个类库ClassLibrary2,其中的Class2类有两个公用方法test()和Test()(公用的,划重点,只有公用的才能被外部引用,才需要严格符合CLS标准,私有的也就没有引用之说了),方法定义只是一个字母大小写的区别,这在C#之中自然是没有问题的。

但是我们将其编译成dll文件,给VB语言或者其他不区分大小写的语言项目引用,去调用test()或Test()方法,就会出现问题,原因是该语言不能识别出test()和Test()的区别,自然就无法进行精准的调用。

那么我们便可以说该类库暴露的公有部分,是不符合CLS规范的。

可是我们在编写C#代码的时候,怎么样才能让其严格的符合规范,不出现遗漏呢?总不能时时刻刻的紧绷着神经进行人肉审核吧,要是少量代码还好说,要是代码量大的话还不把人累死,更何况有时一个类库需要许多个程序员分工去写,人工审的话更是天方夜谭。

好在,一个特性解决了我们的问题(赞美伟大的编译器),该特性就是CLSCompliant,让我们查看他的定义:

很好的解决了我们的需求,看看用他的效果怎么样:

使用了该特性之后,违反CLS的代码便会报出警告,如果你觉得警告还是容易被忽略的话,那么咱们还可以通过设置提醒级别将其定义为错误,如下(我这里是用的VS2019):

在警告详情之上进行右键(右键菜单无法截图,只好就酱紫了):

选择Set severity,选择安全等级error,设置好之后,就会发现警告等级变成了错误,并且无法通过编译:

这样的话,违反规范的地方想不改都不行,便能够保证我们用C#写的类库可以在.net平台之上被任何语言调用,这才是将.net这个所谓的跨语言平台物尽其用。

以上

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值