"Privater" Sichtbarkeitsmodifikator - Wie geht man mit Unterschieden um, wenn man C # in VB umwandelt?

8

Der Hintergrund

Ich habe den unten stehenden C # -Code (in der TreeViewAdv-Datei TreeColumn.cs) in den VB.net-Code umgewandelt, indem ich den Converter von DeveloperFusion.com verwendet habe.

C #

%Vor%

VB

%Vor%

Das Problem

Der Zugriff auf TreeColumn.TreeColumnConverter in dieser Zeile des C # -Codes ist in Ordnung. [TypeConverter (typeof (TreeColumn.TreeColumnConverter)), DesignTimeVisible (false), ToolboxItem (false)]

VB.Net erlaubt jedoch keinen Zugriff auf dieses Element in der konvertierten Zeile:     

Die Fehlerbeschreibung lautet: Aga.Controls.Tree.TreeColumn.TreeColumnConverter' is not accessible in this context because it is 'Private' . In beiden Fällen wird TreeColumn.TreeColumnConverter jedoch als Privat deklariert.

Die Frage (n)

1.) Das Warum. Da dies ein Lernprojekt für mich ist, würde ich gerne wissen, warum die Bereiche sich in den beiden Sprachen unterschiedlich verhalten. Dies ist die wichtigere Frage unter den 2 von ihnen.

2.) Das Wie. Was ist der beste Weg, den VB-Code so zu ändern, dass TreeColumnConverter auf die angegebene Codezeile zugreifen kann, ohne den Bereich so weit zu öffnen, dass möglicherweise an anderer Stelle Benennungsverwechslungen entstehen? Ich könnte es einfach öffentlich erklären, aber ich stelle mir vor, dass es einen korrekeren Ansatz dafür gibt.

Bei der Beantwortung von Fragen zu beachtende Punkte

1.) Ich weiß, dass in VB.net Private Mitglieder außerhalb des Objekts, in dem sie deklariert wurden, nicht verfügbar sind. Also sagt mir, dass dies nicht hilfreich ist und in meinen Gedanken keine Antwort ist.

    
ProtoNoob 01.11.2013, 23:50
quelle

2 Antworten

5

Für mich sieht es so aus, als ob die verschiedenen Compiler verschiedene Philosophien verwenden, wenn es um verschachtelte private Typen geht. C # sagt, dass es OK ist, um von einem Attribut auf dem höheren Level-Typ darauf zuzugreifen, VB.NET sagt, dass es nicht ist. Vielleicht waren diese Philosophien nicht einmal beabsichtigt.

Wie auch immer, um es in VB.NET zu beheben, könnten Sie das TypeConverterAttribute -Konstruktor, der eine Zeichenfolge anstelle von Type verwendet, und den vollständig qualifizierten geschachtelten Typnamen als Zeichenfolge verwenden:

%Vor%     
Jordão 02.11.2013, 00:47
quelle
0

Ah, ich glaube, ich sehe dein Problem.

Es sind die Namespaces.

VB.NET kettet die Namespaces.

Namespace Aga.Controls.Tree in vb.net wäre eigentlich der Standard-Namespace Ihres Projekts, verkettet mit dem Namespace, der in der Datei deklariert ist.

Es wäre tatsächlich Aga.Controls.Tree.Aga.Controls.Tree , so dass es wahrscheinlich nicht zum gewünschten Bereich gelangen kann, da es auf den falschen Namespace verweist.

C #, Sie qualifizieren Namespaces vollständig ... Der DevFusion-Konverter (wie der in SharpDevelop IDE verwendete) weiß das nicht.

    
user817530 02.11.2013 00:28
quelle