当前位置: 首页 > 编程语言 > C#

警告CS3006在这种情况下有效吗?分享

时间:2023-04-10 14:31:49 C#

警告CS3006在这种情况下是否有效?下面的代码产生警告CS3006“重载方法MyNamespace.Sample.MyMethod(int[])'仅在ref或out上有所不同,或者在数组级别不符合CLS”。这个警告是否有效,即这真的不符合CLS吗?我原以为显式接口实现不会算作重载。[程序集:CLSCompliant(true)]namespaceMyNamespace{publicclassSample:ISample{publicvoidMyMethod(int[]array){return;}voidISample.MyMethod(refint[]array){this.MyMethod(array);}}publicinterfaceISample{voidMyMethod([In]refint[]array);}}CLS合规性仅适用于您班级的可见部分。所以你认为refint[]不是公开的,因此无关紧要。但是通过界面是可见的。代码的用户知道Sample提供了voidMyMethod(int[])。他们还知道它实现了提供的voidMyMethod(refint[])ISample。所以我认为它实际上不符合CLS。编辑:EricLippert评论了原始问题,他认为这实际上是一个编译器错误,原始代码符合CLS。然而,这是有效的:[assembly:CLSCompliant(true)]namespaceMyNamespace{publicclassSample:ISample,ISample2{voidISample.MyMethod(refint[]array){}voidISample2.MyMethod(int[]array){}}公共接口ISample{voidMyMethod(refint[]array);}publicinterfaceISample2{voidMyMethod(int[]array);这是因为CLS定义了两个接口可以定义具有相同名称或签名方法的冲突,并且编译器必须知道如何区分-但同样,只有当冲突发生在两个接口之间时。以上是C#学习教程:IsthewarningCS3006validinthiscase?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: