문제

다음은 vs.net 2005에 따라 CLS- 불만이 아닌 구체적인 예입니다.

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 등과 같은 클래스와 함께 구현하는 인터페이스입니다. 기본 데이터베이스 기본 키 유형을 하나의 공통 .NET 유형으로 추상화하는 방법입니다.

내가 표시하지 않는 것은 기본 데이터베이스 유형이 주어지면 올바른 콘크리트 유형 (예 : SQL Server 유형 'int'의 새로운 DBID32)을 인스턴스화하는 공장 방법입니다.

이제이 인터페이스를 사용하여 다음과 같이 사용한다고 가정 해 봅시다.

Public MustOverride ReadOnly Property ID() As IDbId

VS는 이제이 경고 메시지를 출력합니다.

반환 유형의 함수 'ID'는 CLS-Commaint가 아닙니다.

이 속성을 인터페이스에 추가 하여이 경고를 중지 할 수 있습니다.

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

이 인터페이스가 정의하는 기능 중 어느 것도 문서화 된 규칙을 중단하는 것 같습니다. 여기. 그렇다면 왜 VS가 이러한 경고를 표시 하는가?

도움이 되었습니까?

해결책

예제에서 Mustoverride 키워드 수정 자 때문이라고 생각합니다. 이것 좀 봐:CLS 호환 클래스에서는 비 CLS 호환 'Mustoverride'멤버가 허용되지 않습니다.

다른 팁

난 달린다 fxcop 그리고 그것은 항상 DLL CLS를 준수하는 데 필요한 것이 무엇인지 지적하는 것 같습니다.

.NET 리플렉터를 사용하여 속성이 있거나없는 결과적으로 생성 된 코드를 살펴보고 차이가 있는지 확인하십시오.

있다면 차이점을 분명히 설명하지 않으면 (즉, 유일한 차이가 clicalliant 속성이라면) 결과와 함께 질문을 수정하면 또 다른 가질 것입니다 ...)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top