Domanda

Ecco un esempio specifico che non è un reclamo CLS secondo 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

Questa è un'interfaccia che implemento con classi come DbId32, DbId64, DbIdString, ecc. È un modo per astrarre il tipo di chiave primaria del database nativo in un tipo .Net comune.

Quello che non sto visualizzando è il metodo factory che crea un'istanza del tipo concreto corretto (ad esempio il nuovo DbId32 per un tipo di SQL Server 'int', ad esempio) dato un tipo di database nativo.

Ora diciamo che vado a usare questa interfaccia in questo modo:

Public MustOverride ReadOnly Property ID() As IDbId

VS ora genera questo messaggio di avviso:

  

Il tipo di restituzione della funzione "ID" non è un reclamo CLS.

Posso interrompere questi avvisi aggiungendo questo attributo alla mia interfaccia in questo modo:

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

Nessuna delle funzioni definite da questa interfaccia sembra infrangere le regole documentate qui . Quindi perché VS visualizza questi avvisi?

È stato utile?

Soluzione

Penso che sia dovuto al modificatore di parole chiave MustOverride nel tuo esempio. Controllalo: Un membro 'MustOverride' non conforme a CLS non è consentito in una classe conforme a CLS

Altri suggerimenti

Corro FXCop e sembra indicare sempre cosa ci vuole per fare una dll conforme a CLS

Usa il riflettore .net per dare un'occhiata al codice generato sia con che senza l'attributo, e vedi se c'è qualche differenza.

Se c'è, e ovviamente non spiega le differenze (cioè se l'unica differenza è l'attributo CLICompliant), allora modifica le tue domande con i risultati e proverò un altro ...:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top