的背景
我已经使用 DeveloperFusion.com 上的转换器将下面的 C# 代码(在 TreeViewAdv 文件 TreeColumn.cs 中找到)转换为 VB.net 代码。
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
问题
在这行 C# 代码中访问 TreeColumn.TreeColumnConverter 就可以了。[TypeConverter(typeof(TreeColumn.TreeColumnConverter)), DesignTimeVisible(false), ToolboxItem(false)]
但是,VB.Net 不允许在转换后的行中访问该成员:
错误描述如下: Aga.Controls.Tree.TreeColumn.TreeColumnConverter' is not accessible in this context because it is 'Private'
。但是,在这两种情况下,TreeColumn.TreeColumnConverter 都被声明为 Private。
问题
1.) 为什么。由于这对我来说是一个学习项目,所以我想知道为什么范围在两种语言之间的行为不同。这是他们两个中比较重要的一个问题。
2.) 如何。更改 VB 代码以允许 TreeColumnConverter 访问已识别的代码行而不打开范围以致可能在其他地方造成命名混淆的最佳方法是什么?我可以将其声明为 Public,但我想有一种更正确的方法。
回答时要记住的事情
1.) 我知道在 VB.net 中,私有成员在声明它们的对象之外不可用。所以告诉我这不会有帮助,在我看来这不是一个答案。