频道栏目
读书频道 > web开发 > .NET > .NET安全揭秘
1.2.2 公共语言规范
2012-10-24 13:54:44     我来说两句
收藏   我要投稿

本文所属图书 > .NET安全揭秘

全书共分为五个部分。第一部分:.NET安全基础,透彻讲解了.NET体系结构、程序集与反射、应用程序域和CLR寄宿等核心技术,这部分内容是.NET架构的核心,同时也是理解.NET底层安全机制的基础;第二部分:.NET平台安...  立即去当当网订购

CLR集成了很多种语言,并让它们之间可以相互访问,这是因为CLR建立了标准的类型集、元数据、公共执行环境。但由于各种语言间存在着极大的差别(如区分大小写,有的不支持unsigned、操作符重载或者参数可变的方法),所以要想创建这种让别的语言都能访问的程序,自己所用的编程语言只能使用其他语言都支持的那些特性。为了帮助我们更好地做到这一点,Microsoft定义了一个“公共语言规范”(Common Language Specification,CLS)。

CLS定义了CTS的子集,通过定义一组开发人员可以确信在多种语言中都可用的功能来增强和确保语言互用性。CLS 还建立了CLS遵从性要求,它能帮助你确定托管代码是否符合CLS及一个给定的工具对托管代码(该代码是使用CLS功能的)开发的支持程度。

如果你的组件在对其他代码(包括派生类)公开的API中只使用了 CLS 功能,那么可以保证在任何支持 CLS 的编程语言中都可以访问该组件。遵守CLS规则、仅使用CLS 所包含功能的组件叫做符合 CLS的组件。

如图1-2所示,CLR/CTS提供了一个组特性,一些语言会提供这些特性的一个较大子集(IL提供全部特性)。而CLS是每种语言必须支持的一个最小特性集合。


 

如果一种语言定义了一个类型,并希望在另一种语言中使用该类型,就绝对不能在该类型的公共和受保护的成员中使用CLS外部的任何特性。否则其他编程人员使用其他语言来编写代码时,就可能无法访问该类型的成员。代码清单1-3简单地演示了遵从CLS兼容性的代码编写。

代码清单1-3CLS兼容性示例

using System;
//告诉编译器检查CLS相容的特性
[assembly: CLSCompliant(true)]
namespace SomeLibrary
{
//开始出现警告,因为类是公有的
public sealed class SomeLibraryType
{
    //警告,返回值不符合CLS
  public UInt32 Abc()
  {
      return 0;
  }
    //警告,仅大小写不同不符合CLS
  public void abc()
  {
  }
    //没有错误,该方法是私有的
  private UInt32 ABC()
  {
   return 0;
  }   
}
}

如果将上述代码中SomeLibraryType类的修饰符public去掉,一切警告也就消失了,因为这样该类将使用默认修饰符internal,所以在程序集的外部不可见。

注意不能把类SomeLibraryType的修饰符public改成private、protected或protected internal中的任何一个,因为命名空间中定义的元素无法显式声明为 private、protected 或 protected internal。

关于CLS的详细内容请读者参考MSDN文档及相关资料。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.2.1 CTS基本结构
下一篇:1.3 中间语言
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站