【发布时间】:2013-11-13 06:34:45
【问题描述】:
背景
我已经使用 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 中,私有成员在声明它们的对象之外是不可用的。所以告诉我这不会有帮助,在我看来不是答案。
【问题讨论】:
-
我不太清楚为什么这需要一个巨大的答案。只需将其从私人更改为朋友。 VB.NET 是一种友好的语言。
-
@HansPassant 您应该将其发布为答案,虽然您没有给我 WHY,但这是一个有效的 HOW。 Jordao 的回答也是一个有效的方法。如果你能说服我你的方法更好,我会给你“接受的答案”。
标签: c# vb.net type-conversion private access-modifiers