Pro*_*oob 8 c# vb.net private access-modifiers type-conversion
的背景
我已经使用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
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
问题
在这行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访问已识别的代码行而不打开范围以至于可能在其他地方创建命名混淆的最佳方法是什么?我可以宣布它是公开的,但我想有一个更正确的方法.
回答时要记住的事情
1.)我知道在VB.net中,私有成员在声明它们的对象外部不可用.所以告诉我这不会有帮助,在我看来不是一个答案.
对我来说,看起来不同的编译器在处理嵌套的私有类型时使用不同的哲学.C#表示可以从更高级别类型的属性访问它,VB.NET说它不是.也许这些哲学甚至都不是故意的.
无论如何,要在VB.NET中修复它,您可以使用TypeConverterAttribute
使用字符串而不是a 的构造函数,Type
并将完全限定的嵌套类型名称作为字符串:
<TypeConverter("Aga.Controls.Tree.TreeColumn.TreeColumnConverter"), DesignTimeVisible(False), ToolboxItem(False)> _
Public Class TreeColumn
...
Run Code Online (Sandbox Code Playgroud)