. Interoperabilità dei linguaggi di lingua netta [chiusa]

7

Spero che questo sia il forum appropriato per porre questa domanda.

Un gruppo di colleghi e io appena iniziato ad apprendere C # alcune settimane fa e stiamo pianificando una discussione sull'interoperabilità linguistica.

Quindi, sto cercando esempi noti / classici di problemi di interoperabilità linguistica .Net. Come questo, dove l'insensibilità al caso di VB.Net rende un metodo C # sovraccarico incompatibile.

In C #

public class Foo
{
    public void foo() { }
    public void fOO() { }
}

In VB.Net

Public Class Bar
   Sub Bar()
      Dim foo As Foo
      foo = New Foo()
      foo.foo(); //compiler error
   End Sub
End Class

O questo in cui una parola chiave VB.Net viene utilizzata in un nome di metodo C #:

In C #

public class Foo
{
   public virtual void Stop() { }
}

In VB.Net

Public Class Bar
    Inherits Foo

    Public Overrides Sub Stop() 'compiler error
    End Sub

End Class

Mi piacerebbe raccogliere qualche altro esempio di questo tipo di problemi.

Qualcuno conosce altri casi interessanti di trucchi per l'interoperabilità linguistica?

Ho usato C # e VB.Net in questi esempi, ma qualsiasi problema di interoperabilità linguistica .Net sarà altrettanto valido per arricchire una discussione sull'argomento.

    
posta edalorzo 27.07.2012 - 19:00
fonte

2 risposte

12

Specifica lingua comune è una chiave

Sarebbe meglio migliorare la tua comprensione di come scrivere un codice compatibile con Common Language Specification (CLS). Credo che risolverebbe la maggior parte dei problemi che hai riscontrato o trovato.

Fondamentalmente, la conformità CLS si riferisce alle regole e alle restrizioni CLS che vengono seguite. Tuttavia, il concetto ha un significato più specifico a seconda che si stia descrivendo il codice conforme a CLS o gli strumenti di sviluppo compatibili con CLS, come un compilatore. Gli strumenti conformi a CLS possono aiutarti a scrivere codice conforme a CLS.

CisononumerosiarticolisuMSDNealtrovechesuggerireidiseguire:

risposta data 27.07.2012 - 19:07
fonte
3

Ricorda che non sei limitato nel codice che è interno al tuo assembly, solo le cose che sono esposte pubblicamente devono essere conformi a CLS.

  • Non esporre variabili non firmate.
  • Non esporre identificatori che differiscono solo per caso.
  • Sovraccarico dell'operatore, alcune lingue non possono utilizzare operatori sovraccaricati, quindi fornire un metodo per ottenere la stessa funzione dell'operatore sovraccarico.
  • Evita i puntatori non gestiti.
  • Mantieni i nomi univoci, ad esempio non nominare un metodo di tipi e mettere in campo la stessa cosa.
  • Non esporre i tipi di valore in box.
  • Non sovraccaricare campi o eventi.
  • Non sovraccaricare le proprietà per tipo.
  • Non sovraccaricare i metodi in base al tipo restituito.
  • Esporre metodi alternativi per i cast impliciti ed espliciti.
  • Non esporre elenchi di argomenti di lunghezza variabile (parola chiave params in C #).
  • Non utilizzare matrici con un limite inferiore diverso da zero ( link ).
  • Non lanciare oggetti che non ereditano da System.Exception.
  • Segna il tuo assembly con ( System.ClsCompliant ) attributo.
risposta data 27.07.2012 - 21:45
fonte

Leggi altre domande sui tag