C# 参数类型不符合CLS,为什么?
我收到这样的警告 如果你知道它是什么,请解释并帮助我摆脱它。C# 参数类型不符合CLS,为什么?,c#,C#,我收到这样的警告 如果你知道它是什么,请解释并帮助我摆脱它。 Nam。在AssemblyInfo.cs文件中,您可能有一行内容是 [assembly:CLSCompliant(true)] 如果您这样做,则必须满足以下规则。(抄袭自) 未签名类型不应是类的公共接口的一部分。这意味着公共字段不应具有uint或ulong等无符号类型,公共方法不应返回无符号类型,传递给公共函数的参数不应具有无符号类型。但是,未签名类型可以是私有成员的一部分 不安全类型(如指针)不应与公共成员一起使用。但是,它们可
Nam。在AssemblyInfo.cs文件中,您可能有一行内容是
[assembly:CLSCompliant(true)]
如果您这样做,则必须满足以下规则。(抄袭自)
- 这是一个老问题,但我认为应该为未来的调查者(比如我自己)提供更好的解释
首先,其他答案中的链接详细说明了发出此警告的原因
但是,总而言之,如果为公共语言运行库(如C#)编写的代码可以与为CLR设计的其他语言进行接口,则该代码符合CLS。这意味着特定于该语言的某些数据类型(对于整个运行时来说不是通用的)是不兼容的。在变量和方法方面,快速简便的解决方法是为它们提供可见性修饰符
internal
,该修饰符指定方法、类、属性等在为其构建的程序集外部不可见。这只应在您不需要或不希望在组件外部使用的项目上进行;对于那些您希望可见的数据类型,请使用符合CLS的数据类型。INotificationService是什么样子的?未签名类型可能是公共接口的一部分,如果它们不公开用没有未签名类型的语言编写的代码可能希望使用但无法使用的任何功能。例如,将32位无符号值存储为四个连续字节的方法可以合法地包含UInt32
和Int64
的重载,并且类可以提供将四个连续字节转换为UInt32
的方法,前提是它还提供了一个将返回与Int64
相同的值的方法。