C# 参数类型不符合CLS,为什么?

C# 参数类型不符合CLS,为什么?,c#,C#,我收到这样的警告 如果你知道它是什么,请解释并帮助我摆脱它。 Nam。在AssemblyInfo.cs文件中,您可能有一行内容是 [assembly:CLSCompliant(true)] 如果您这样做,则必须满足以下规则。(抄袭自) 未签名类型不应是类的公共接口的一部分。这意味着公共字段不应具有uint或ulong等无符号类型,公共方法不应返回无符号类型,传递给公共函数的参数不应具有无符号类型。但是,未签名类型可以是私有成员的一部分 不安全类型(如指针)不应与公共成员一起使用。但是,它们可

我收到这样的警告 如果你知道它是什么,请解释并帮助我摆脱它。
Nam。

在AssemblyInfo.cs文件中,您可能有一行内容是

[assembly:CLSCompliant(true)]
如果您这样做,则必须满足以下规则。(抄袭自)

  • 未签名类型不应是类的公共接口的一部分。这意味着公共字段不应具有uint或ulong等无符号类型,公共方法不应返回无符号类型,传递给公共函数的参数不应具有无符号类型。但是,未签名类型可以是私有成员的一部分

  • 不安全类型(如指针)不应与公共成员一起使用。但是,它们可以与私人成员一起使用

  • 类名和成员名不应仅根据大小写而有所不同。例如,我们不能有两个名为MyMethod和MyMethod的方法

  • 只能重载属性和方法,不应重载运算符

  • 更多信息:

    您可以在引用不符合CLS的程序集(并公开其不符合CLS的成员)的符合CLS的程序集中获得这些警告:


      • 这是一个老问题,但我认为应该为未来的调查者(比如我自己)提供更好的解释

        首先,其他答案中的链接详细说明了发出此警告的原因


        但是,总而言之,如果为公共语言运行库(如C#)编写的代码可以与为CLR设计的其他语言进行接口,则该代码符合CLS。这意味着特定于该语言的某些数据类型(对于整个运行时来说不是通用的)是不兼容的。在变量和方法方面,快速简便的解决方法是为它们提供可见性修饰符
        internal
        ,该修饰符指定方法、类、属性等在为其构建的程序集外部不可见。这只应在您不需要或不希望在组件外部使用的项目上进行;对于那些您希望可见的数据类型,请使用符合CLS的数据类型。

        INotificationService是什么样子的?未签名类型可能是公共接口的一部分,如果它们不公开用没有未签名类型的语言编写的代码可能希望使用但无法使用的任何功能。例如,将32位无符号值存储为四个连续字节的方法可以合法地包含
        UInt32
        Int64
        的重载,并且类可以提供将四个连续字节转换为
        UInt32
        的方法,前提是它还提供了一个将返回与
        Int64
        相同的值的方法。