2011-12-21 25 views
8

Tengo algo extraño en VB.NET, nunca se notará antes ...propiedad con el parámetro

tengo una clase en VB.NET que tenga una propiedad con el parámetro y quiero utilizar ese propiedad en otra clase C# al hacer objeto de la clase VB.NET pero el objeto clase no muestra esa propiedad, podría alguien decirme si puedo acceder a esa propiedad en C# o no.

  • En caso afirmativo, ¿cómo?
  • Si no, ¿qué significa CLR?

Aquí está mi código ...

Public Property AsString(ByVal name As String) As String 
    Get 
      //Some code 
    End Get 
    Set(ByVal value As String) 
      //Some code 
    End Set 
End Property 

Nota: no puedo cambiar el código VB.NET como se compila DLL.

Gracias en Advance

+0

¿qué es lo que entendemos por una propiedad con ¿parámetro? –

+1

¿Por qué mencionas el [CLR] (http://en.wikipedia.org/wiki/Common_Language_Runtime)? –

+0

Sé que esto es 4 años después, pero no he tenido que hacer esto hasta ahora. Entonces, ¿sigue siendo cierto que C# no admite propiedades que tienen parámetros? Lo he visto en VB, pero nunca lo he visto en C#. Supongo que la respuesta es sí, C# no lo admite. Solo quiero verificar eso. – Rod

Respuesta

10

Propiedades parametrizado se convierten a get_ y set_ métodos.

string name = "Foo"; 
string value = "Bar"; 
MyObject.set_AsString(name, value); 
string fooValue = MyObject.get_AsString(name); 
+0

¡Oh! ¡¡Los quiero muchachos!! muchas gracias ... – ANKIT

6

C# no admite propiedades indizadas que no tienen la palabra clave por defecto. Usted simplemente usa get_AsString() para llamar a la propiedad getter y set_AsString() para llamar al setter. Métodos, no propiedades Deben aparecer fácilmente en la lista de IntelliSense.

También tenga en cuenta que set_AsString() requiere dos argumentos aunque haya hecho que el conjunto de propiedades no esté indexado. Pasar cualquier cosa, nulo servirá.

Fwiw, esto es quizás ilustrativo de por qué el equipo C# decidió no admitir propiedades indexadas en el caso general. La falta de correspondencia entre el captador y el colocador es dolorosa. El equipo de vb.net no tuvo otra opción, Visual Basic los tuvo mucho antes de que apareciera .NET. Sin embargo, hizo un regreso parcial en la versión 4 de C#, las propiedades indexadas son compatibles con las interfaces COM. La programación de interoperabilidad COM es demasiado dolorosa sin ellos. Particularmente en el modelo de objetos de Office.

+0

¿De qué "desajuste" estás hablando? El setter de la propiedad está indexado; la "lista de parámetros" para el colocador solo incluye el valor, porque es lo único que no se especificó en la definición de propiedad en sí.Puede haber una ligera ambigüedad aparente si una propiedad indexada y no indexada tiene el mismo nombre, y el tipo de la propiedad no indexada tiene un indexador predeterminado, pero en realidad no hay ambigüedad: 'thing.prop (x)' se unirá a una propiedad indexada adecuada si existe; si uno quiere usar el no indexado e indexar el resultado, uno puede usar '(thing.prop) (x)'. – supercat

+0

Tal cosa podría ser útil si uno tiene, por ejemplo, un diccionario que mantiene las claves y los valores en el orden en que se agregaron, y permite el acceso a las claves o valores mediante el índice numérico, además de permitir el acceso a los valores a través de las claves. 'MyDict.Keys (2)' sería la tercera clave añadida, y 'MyDict.Values ​​(2)' sería su valor correspondiente. Uno podría obtener resultados similares al hacer que 'MyDict.Keys' y' MyDict.Values' devuelvan una estructura que contenga una referencia al diccionario, y que tenga un indexador que llamaría a una función adecuada en ese diccionario, pero sería más difícil. – supercat

+0

Si lo hicieron como en C++/CLI e imponen que getter y setter tengan que definir y usar los mismos parámetros, entonces no debería haber ninguna confusión: 'public string Source [int i_ixSource] {get (int i_ixSource) {. ..} set (int i_ixSource) {...}} 'Actualmente me duele mucho trabajar con docenas de buenas propiedades parametrizadas que implementé en mi código C++/CLI mientras convertía a C#. –

0

Si u han notado en realidad hay dos parámetros en su propiedad es de tu nombre y otra es el valor por defecto así que tienes que dar dos valores de parámetros cuando u obra con la