cls定义了组件和cls兼容的要求,以使组件可以在不同的.net语言中使用。在设计一个能用于其他语言的组件时,必须使该组件与cls兼容。这样才能保证这个组件可以用于所有的。net语言。如果把一个类标记为与cls兼容,编译器就会对不兼容的方法进行警告。
在讨论.net语言时,必须区分.net consumer和.net extender工具。
当把程序集标记为兼容的,仍可以定义不兼容的方法,如果重写某些方法,使其参数是兼容的和不兼容的数据类型,就必须把类中的不兼容的方法的clscompliant属性设置为false。clscompliant属性可以应用到类型、方法、属性、字段和事件。
.net consumer工具只适用.net Framework中的类,不能创建可以用于其他语言的。net类。.net consumer工具可以使用任何与cls兼容的类。.net extender工具则可以满足consumer的要求,另外可以继承任何与cls兼容的.net类,定义了可以由consumer使用的新cls兼容类。
利用CLSCliant属性,可以把程序集标记为与cls兼容,这样可以确保这个程序集中的类能用于所有的.net consumer工具。
程序集与cls规则兼容的要求:
  • 方法原型中的所有类型都必须与cls兼容
  • 数组元素的元素类型必须与cls兼容
  • cls兼容类必须继承与cls兼容类,
  • 在cls兼容类中,方法名是不区分大小写的
  • 枚举的类型必须是int16,或int32,int64
  • 上述枚举的要求只适用于公共成员和受保护的成员。