Фон«Частный» модификатор видимости - как обрабатывать различия при преобразовании C# в VB?
Я преобразовал С # код ниже (найденный в TreeColumn.cs файлов TreeViewAdv) в VB.net кода, используя преобразователь найти на 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
Проблема
Доступ к TreeColumn.TreeColumnConverter в этой строке C# код нормально. [TypeConverter (TypeOf (TreeColumn.TreeColumnConverter)), DesignTimeVisible (ложь), ToolboxItem (ложь)]
Однако VB.Net не разрешает доступ к этому члену в преобразованной линии:
Погрешность описание читает: Aga.Controls.Tree.TreeColumn.TreeColumnConverter' is not accessible in this context because it is 'Private'
. Однако в обоих случаях TreeColumn.TreeColumnConverter объявлен Private.
Вопрос (ы)
1.) почему. Поскольку это учебный проект для меня, я хотел бы знать, ПОЧЕМУ области действия действуют по-разному между двумя языками. Это более важный вопрос среди двух из них.
2.) Как. Каков наилучший способ изменить код VB, чтобы разрешить доступ TreeColumnConverter к идентифицированной строке кода, не открывая область до такой степени, что она потенциально может создавать путаницы в именовании в другом месте? Я могу просто объявить его общедоступным, но я полагаю, что есть более правильный подход к этому.
Вещи иметь в виду при Отвечая
1.) Я знаю, что в VB.net Частные члены не доступны внешним по отношению к объекту, в котором они были объявлены. Поэтому, рассказывая мне, что это не будет полезно, и, на мой взгляд, это не ответ.
Не то, очевидно, для меня, почему это требует гигантского ответа. Просто измените его с Частного на Друга. VB.NET - это дружелюбный язык. –
@ HansPassant. Вы должны опубликовать это как ответ, хотя вы не дали мне ПОЧЕМУ, это действительно КАК. Ответ Жордао также действителен. Если вы сможете убедить меня, что ваша методология лучше, я дам вам «Принятый ответ». – ProtoNoob