2011-12-21 20 views
8

mam coś dziwnego w VB.NET, nigdy nie zauważy przed ...nieruchomości z parametrem

Mam klasę w VB.NET o właściwość z parametrem i chcę użyć tego właściwość w innym C# Class przez uczynienie obiektu klasy VB.NET, ale obiekt klasy nie wyświetlający tej właściwości, czy ktoś mógłby mi powiedzieć, czy mogę uzyskać dostęp do tej właściwości do C#, czy nie.

  • Jeśli tak, w jaki sposób?
  • Jeśli nie, co oznacza CLR?

Oto mój kod ...

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 

Uwaga: Nie mogę zmienić kod VB.NET, ponieważ jest skompilowany DLL.

Dzięki z góry

+0

co masz na myśli przez działce z parametr? –

+1

Dlaczego wspominasz o [CLR] (http://en.wikipedia.org/wiki/Common_Language_Runtime)? –

+0

Wiem, że to 4 lata później, ale do tej pory nie musiałem tego robić. Czy nadal jest tak, że C# nie obsługuje właściwości, które mają parametry? Widziałem to w VB, ale nigdy nie widziałem go w C#. Zakładam, że odpowiedź brzmi "tak", C# tego nie obsługuje. Chcę to tylko zweryfikować. – Rod

Odpowiedz

10

Właściwości parametryzowane są konwertowane do get_ i set_ metod.

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

Oh! kocham was chłopaki!! dziękuję bardzo ... – ANKIT

6

C# nie obsługuje indeksowanych właściwości, które nie mają domyślnego słowa kluczowego. Po prostu użyj get_AsString(), aby wywołać funkcję getter właściwości i set_AsString(), aby wywołać program ustawiający. Metody, a nie właściwości. Powinny pojawić się na liście IntelliSense.

Należy również zauważyć, że set_AsString() wymaga dwóch argumentów, nawet jeśli ustawiono właściwość ustawiania właściwości nieindeksowanych. Przekaż cokolwiek, null zrobi.

Fwiw, jest to być może ilustracją tego, dlaczego zespół C# zdecydował się nie obsługiwać indeksowanych właściwości w ogólnym przypadku. Niedopasowanie między geterem a seterem jest bolesne. Zespół vb.net nie miał wyboru, Visual Basic miał je dawno temu .NET pojawił się. Częściowo powrócił w C# wersji 4, ale indeksowane właściwości są obsługiwane w interfejsach COM. Programowanie między programami COM jest zbyt bolesne bez nich. Zwłaszcza w modelu obiektowym Office.

+0

O czym "niedopasowanie" mówisz? Ustawiciel nieruchomości jest indeksowany; "lista parametrów" dla settera zawiera tylko wartość, ponieważ jest to jedyna rzecz, której nie podano w samej definicji właściwości.Może istnieć niewielka widoczna niejednoznaczność, jeśli indeksowana i nieindeksowana własność ma tę samą nazwę, a typ nieindeksowanej właściwości ma domyślny indeksator, ale w rzeczywistości nie ma niejasności: 'thing.prop (x)' zwiąże z odpowiednią właściwością indeksowaną, o ile istnieje; jeśli chce się użyć nieindeksowanego i zindeksować wynik, można użyć '(thing.prop) (x)'. – supercat

+0

Takie coś mogłoby być przydatne, gdyby ktoś miał np. słownik, który utrzymywał klucze i wartości w kolejności, w jakiej zostały dodane, a także pozwalał na dostęp do kluczy lub wartości za pomocą indeksu numerycznego, oprócz umożliwienia dostępu do wartości za pomocą klawiszy. 'MyDict.Keys (2)' będzie trzecim dodanym kluczem, a "MyDict.Values ​​(2)" będzie jego odpowiednią wartością. Można osiągnąć podobne rezultaty, zwracając nazwę 'MyDict.Keys' i' MyDict.Values', zwracając strukturę, która zawierała odnośnik do słownika, i posiadającą indeksator, który wywoływałby odpowiednią funkcję w tym słowniku, ale byłby bardziej lodowaty. – supercat

+0

Jeśli zrobili to tak, jak w C++/CLI i narzucono, że getter i seter muszą zdefiniować i używać tych samych parametrów, to nie powinno być żadnych nieporozumień: 'public string Źródło [int i_ixSource] {get (int i_ixSource) {. ..} set (int i_ixSource) {...}} 'Obecnie jest to wielki ból w dupie dla mnie do pracy nad dziesiątkami ładnych sparametryzowanych właściwości, które zaimplementowałem w moim kodzie C++/CLI podczas konwersji do C#. –

0

Jeśli u zauważyli rzeczywiście istnieją dwa parametry nieruchomości nich jest imię i nazwisko, a drugi jest wartość domyślna więc u trzeba dać dwie wartości parametru, gdy u pracy z tym