¿Cuáles son las reglas más avanzadas necesarias para que su código se convierta en reclamo de CLS?

StackOverflow https://stackoverflow.com/questions/332515

Pregunta

Aquí hay un ejemplo específico que no es una queja CLS de acuerdo con 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

Esta es una interfaz que implemento con clases como DbId32, DbId64, DbIdString, etc. Es una forma de abstraer el tipo de clave primaria de la base de datos nativa en un tipo .Net común.

Lo que no estoy mostrando es el método de fábrica que crea instancias del tipo concreto correcto (es decir, nuevo DbId32 para un tipo de SQL Server 'int', por ejemplo) dado un tipo de base de datos nativa.

Ahora digamos que voy a usar esta interfaz así:

Public MustOverride ReadOnly Property ID() As IDbId

VS ahora muestra este mensaje de advertencia:

  

El tipo de retorno de la función 'ID' no es una queja CLS.

Puedo detener estas advertencias agregando este atributo a mi interfaz así:

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

Ninguna de las funciones que define esta interfaz parece romper las reglas documentadas aquí . Entonces, ¿por qué VS muestra estas advertencias?

¿Fue útil?

Solución

Creo que se debe al modificador de palabras clave MustOverride en su ejemplo. Mira esto: El miembro 'MustOverride' no compatible con CLS no está permitido en una clase compatible con CLS

Otros consejos

Ejecuto FXCop y eso parece indicar siempre qué se necesita para hacer un dll compatible con CLS

Use el reflector .net para ver el código generado con y sin el atributo y ver si hay alguna diferencia.

Si existe, y obviamente no explica las diferencias (es decir, si la única diferencia es el atributo CLICompliant), modifique sus preguntas con los resultados, y tendré otra oportunidad ...:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top