SfondoModificatore di visibilità "privato": come gestire le differenze durante la conversione di C# in VB?
Ho convertito il codice C# di sotto (trovato in TreeColumn.cs di file TreeViewAdv) in codice VB.net utilizzando il convertitore trovato alla DeveloperFusion.com.
C#
using System;
//...(other using calls)
namespace Aga.Controls.Tree
{
[TypeConverter(typeof(TreeColumn.TreeColumnConverter)), DesignTimeVisible(false), ToolboxItem(false)]
public class TreeColumn : Component
{
private class TreeColumnConverter : ComponentConverter
{
public TreeColumnConverter()
: base(typeof(TreeColumn))
{
}
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
{
return false;
}
}
}
//…Some, I believe, unrelated code
}
VB
Imports System.Collections.Generic
‘...(other Imports calls)
Namespace Aga.Controls.Tree
<TypeConverter(GetType(TreeColumn.TreeColumnConverter)), DesignTimeVisible(False), ToolboxItem(False)> _
Public Class TreeColumn
Inherits Component
Private Class TreeColumnConverter
Inherits ComponentConverter
Public Sub New()
MyBase.New(GetType(TreeColumn))
End Sub
Public Overrides Function GetPropertiesSupported(ByVal context As ITypeDescriptorContext) As Boolean
Return False
End Function
End Class
‘...some, I believe, unrelated code
End Class
Il problema
L'accesso a TreeColumn.TreeColumnConverter in questa riga del codice C# va bene. [TypeConverter (typeof (TreeColumn.TreeColumnConverter)), DesignTimeVisible (false), ToolboxItem (false)]
Tuttavia, VB.Net non consente l'accesso a tale membro nella linea convertito:
L'errore descrizione legge: Aga.Controls.Tree.TreeColumn.TreeColumnConverter' is not accessible in this context because it is 'Private'
. Tuttavia, in entrambi i casi TreeColumn.TreeColumnConverter viene dichiarato privato.
The Question (s)
1.) The Why. Poiché questo è un progetto di apprendimento per me, mi piacerebbe sapere perché gli ambiti si comportano in modo diverso tra le due lingue. Questa è la domanda più importante tra i 2 di loro.
2.) Il come. Qual è il modo migliore (s) per modificare il codice VB per consentire l'accesso di TreeColumnConverter alla riga di codice identificata senza aprire l'ambito al punto che potenzialmente crea confusione di denominazione altrove? Potrei semplicemente dichiararlo pubblico, ma immagino ci sia un approccio più corretto a questo.
cose da tenere a mente quando si risponde
1.) So che in VB.net membri privati non sono disponibili esterni all'oggetto in cui sono state dichiarate. Quindi dirmi questo non sarà utile e nella mia mente non è una risposta.
chiaro per me perché questo richiede una risposta gigante. Basta cambiarlo da privato ad amico. VB.NET è un linguaggio amichevole. –
@HansPassant Dovresti postare una risposta, mentre tu non mi dai il WHY, questo è un HOW valido. La risposta di Jordao è anche valida. Se riesci a convincermi che la tua metodologia è migliore, ti darò la "risposta accettata". – ProtoNoob