什么是更先进的规则需要为你的代码成为CLS投诉?
-
22-07-2019 - |
题
这里是一个具体的例子,这是不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属性),然后用结果修改您的问题,我会有另一个去...:)
不隶属于 StackOverflow