.Net Idioma Interoperabilidad Gotchas [cerrado]

7

Espero que este sea el foro apropiado para hacer esta pregunta.

Un grupo de colegas y yo comenzamos a aprender C # hace unas semanas y estamos planeando tener una discusión sobre la interoperabilidad del idioma.

Por lo tanto, estoy buscando ejemplos conocidos / clásicos de problemas de interoperabilidad con el lenguaje .Net. Como este, donde la falta de sensibilidad a mayúsculas y minúsculas de VB.Net hace que un método de C # sobrecargado sea incompatible.

En C #

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

En VB.Net

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

O este en el que se usa una palabra clave VB.Net en un nombre de método C #:

En C #

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

En VB.Net

Public Class Bar
    Inherits Foo

    Public Overrides Sub Stop() 'compiler error
    End Sub

End Class

Me encantaría reunir algunos ejemplos más de este tipo de problemas.

¿Alguien sabe algún otro caso interesante de errores de interoperabilidad de lenguaje?

Utilicé C # y VB.Net en estos ejemplos, pero cualquier problema de interoperabilidad con el lenguaje .Net será igual de bueno para enriquecer una discusión sobre el tema.

    
pregunta edalorzo 27.07.2012 - 19:00

2 respuestas

12

La especificación de lenguaje común es una clave

Sería mejor mejorar su comprensión de cómo escribir un código compatible con Common Language Specification (CLS). Creo que eso resolvería la mayoría de los problemas que ha enfrentado o que ha encontrado.

Básicamente, el cumplimiento de CLS se refiere a las reglas y restricciones de CLS que se siguen. Sin embargo, el concepto tiene un significado más específico dependiendo de si está describiendo un código compatible con CLS o herramientas de desarrollo compatibles con CLS, como un compilador. Las herramientas compatibles con CLS pueden ayudarlo a escribir un código compatible con CLS.

HaynumerososartículosenMSDNyenotroslugaresquesugeriríaseguir:

respondido por el EL Yusubov 27.07.2012 - 19:07
3

Tenga en cuenta que no está restringido en el código que es interno a su ensamblaje, solo las cosas que están expuestas públicamente deben ser compatibles con CLS.

  • No exponga variables sin firmar.
  • No exponga identificadores que solo difieren según el caso.
  • Sobrecarga del operador, algunos idiomas no pueden usar operadores sobrecargados, así que proporcione un método para lograr la misma función que su operador sobrecargado.
  • Evita los punteros no administrados.
  • Mantenga los nombres únicos, por ejemplo, no asigne el mismo nombre a un método de tipos y campos.
  • No exponga los tipos de valor en caja.
  • No sobrecargue campos o eventos.
  • No sobrecargue las propiedades por tipo.
  • No sobrecargue los métodos por tipo de devolución.
  • Exponer métodos alternativos para conversiones implícitas y explícitas.
  • No exponga las listas de argumentos de longitud variable (palabra clave params en C #).
  • No utilice matrices con un límite inferior distinto de cero ( enlace ).
  • No lance objetos que no heredan de System.Exception.
  • Marque su ensamblaje con el atributo ( System.ClsCompliant ).
respondido por el mjcopple 27.07.2012 - 21:45

Lea otras preguntas en las etiquetas