这里是一个具体的例子,这是不CLS投诉的根据VS.NET 2005年。

Public Interface IDbId

    Function GetNativeObject() As Object
    Function Equals(ByVal compObj As IDbId) As Boolean
    Function CompareTo(ByVal compObj As IDbId) As Integer
    Function ToString() As String

End Interface

这是一个接口实施有课程,例如DbId32,DbId64,DbIdString,等等。它是一种抽象的机数据库的主要关键类型成一个共同的。净类型。

什么我不显示的是工厂的方法实例正确的具体类型(即新DbId32SQL Server type'int',例如)给予一个本地数据库的类型。

现在,让我们说我转到使用这个接口,像这样:

Public MustOverride ReadOnly Property ID() As IDbId

VS现在产出这一警告信息:

回归类型的功能'ID'不CLS投诉。

我可以阻止这些警告之后通过加入这个属于我的接口,像这样:

<CLSCompliant(True)> _
  Public Interface IDbId
  ...

没有一个功能,这种接口的定义似乎违规记录 在这里,.那么,为什么VS显示这些警告?

有帮助吗?

解决方案

我认为这是由于您的示例MustOverride关键字修饰。 看一下这个: -CLS兼容非“MustOverride”不允许成员在一个符合CLS的类

其他提示

我跑的FxCop 这似乎总是指出什么需要,使一个DLL符合CLS的

使用.NET反射器以看看具有和不具有该属性的生成的代码,并查看是否有任何区别。

如果有,它并不明显解释的差异(即,如果唯一的区别是CLICompliant属性),然后用结果修改您的问题,我会有另一个去...:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top