如何在项目vb.net中声明两个同名的类
How to declare two classes with the same name in the project vb.net
我从 vb.net 开始并将我的项目 vb6 迁移到 vb.net。
在我的项目中,我在一个文件中有一个名为 A 的 class,声明如下:
Public Class A
.....
End Class
在另一个文件中,我必须声明另一个 class 供本地使用,相同的 class 名称已经在另一个文件 (Class A) 中声明过。
但是两者 class 是不同的。
然后我尝试了以下方法:
Public Class Z
Private _a As A
Public Property a () As A
Get
Return _a
Get End
Set (ByVal value As A)
_a = value
End Set
End Property
End Class Z
Class A
......
End Class
然后我尝试了以下方法:
Public Class Z
Private _a As A
Public Property a () As A
Get
Return _a
Get End
Set (ByVal value As A)
_a = value
End Set
End Property
Class A
......
End Class
End Class Z
需要在实例化 Z 时访问本地 Class A
但是我收到错误消息说:
错误 4 class 'A' 和 class 'A',在命名空间 'BSSystemControl' 中的 'C: \ TFS \ SigaCom \ BsControl System 2014 \ BsSystem \ nfe \ A.vb' 冲突中声明。 C:\TFS\SigaCom\BsControl System 2014\BsSystem\nfe\impostoDevol.VB12 7 BSControl
如果我将 Class A 语句放在 class Z 范围内,我会收到以下消息:
错误 4 'A' 已在此 class 中声明为 'Public Property A The A'。 C:\TFS\SigaCom\BsControl System 2014\BsSystem\nfe\impostoDevol.VB12 11 BSControl
您的成员命名不符合命名约定。私有对象命名应采用驼峰式命名,避免在开始、结束、中间使用“_”字符,public properties ans classes in TitleCase,名称应直观,一种大名的简称。
其次,我认为您所展示的场景根本不需要支持字段。
无论如何,为了解决您刚刚将具有相同 class 名称的每个 class 移动到具有不同名称的不同名称空间的问题,这样您将避免歧义,但这种编程风格不正确。
如果我理解得很好,这就是你的意图吗?:
Public class TopLevelClass
Namespace name1
Public Class Zclass
Public Property A As Aclass
Public Sub New()
Me.A = New Aclass
End Sub
Public NotInheritable Class Aclass
Public Sub New()
End Sub
End Class
End Class
End Namespace
Namespace name2
Public Class Zclass
Public Property A As Aclass
Public Sub New()
Me.A = New Aclass
End Sub
Public NotInheritable Class Aclass
Public Sub New()
End Sub
End Class
End Class
End Namespace
End Class
如果您的目标是序列化,那么您的 class 名称在这方面并不重要。默认情况下,当序列化为 XML 时,属性很重要,可以使用 XmlElement(string)
属性覆盖 属性 名称的使用。例如,给定以下结构:
Public Class Z
Private _a As A2
<XmlElement("A")> _
Public Property a () As A2
Get
Return _a
Get End
Set (ByVal value As A2)
_a = value
End Set
End Property
Class A2
'......
End Class
End Class Z
将序列化为与 XML 相同的:
Public Class Z
Private _a As A2
<XmlElement("A")> _
Public Property ZZZZ () As A2
Get
Return _a
Get End
Set (ByVal value As A2)
_a = value
End Set
End Property
Class A2
'......
End Class
End Class Z
这也将序列化为与 XML 相同的内容:
Public Class Z
Private _a As ZZZZ
<XmlElement("A")> _
Public Property CDEF () As ZZZZ
Get
Return _a
Get End
Set (ByVal value As ZZZZ)
_a = value
End Set
End Property
Class ZZZZ
'......
End Class
End Class Z
我从 vb.net 开始并将我的项目 vb6 迁移到 vb.net。 在我的项目中,我在一个文件中有一个名为 A 的 class,声明如下:
Public Class A
.....
End Class
在另一个文件中,我必须声明另一个 class 供本地使用,相同的 class 名称已经在另一个文件 (Class A) 中声明过。 但是两者 class 是不同的。
然后我尝试了以下方法:
Public Class Z
Private _a As A
Public Property a () As A
Get
Return _a
Get End
Set (ByVal value As A)
_a = value
End Set
End Property
End Class Z
Class A
......
End Class
然后我尝试了以下方法:
Public Class Z
Private _a As A
Public Property a () As A
Get
Return _a
Get End
Set (ByVal value As A)
_a = value
End Set
End Property
Class A
......
End Class
End Class Z
需要在实例化 Z 时访问本地 Class A 但是我收到错误消息说:
错误 4 class 'A' 和 class 'A',在命名空间 'BSSystemControl' 中的 'C: \ TFS \ SigaCom \ BsControl System 2014 \ BsSystem \ nfe \ A.vb' 冲突中声明。 C:\TFS\SigaCom\BsControl System 2014\BsSystem\nfe\impostoDevol.VB12 7 BSControl
如果我将 Class A 语句放在 class Z 范围内,我会收到以下消息:
错误 4 'A' 已在此 class 中声明为 'Public Property A The A'。 C:\TFS\SigaCom\BsControl System 2014\BsSystem\nfe\impostoDevol.VB12 11 BSControl
您的成员命名不符合命名约定。私有对象命名应采用驼峰式命名,避免在开始、结束、中间使用“_”字符,public properties ans classes in TitleCase,名称应直观,一种大名的简称。
其次,我认为您所展示的场景根本不需要支持字段。
无论如何,为了解决您刚刚将具有相同 class 名称的每个 class 移动到具有不同名称的不同名称空间的问题,这样您将避免歧义,但这种编程风格不正确。
如果我理解得很好,这就是你的意图吗?:
Public class TopLevelClass
Namespace name1
Public Class Zclass
Public Property A As Aclass
Public Sub New()
Me.A = New Aclass
End Sub
Public NotInheritable Class Aclass
Public Sub New()
End Sub
End Class
End Class
End Namespace
Namespace name2
Public Class Zclass
Public Property A As Aclass
Public Sub New()
Me.A = New Aclass
End Sub
Public NotInheritable Class Aclass
Public Sub New()
End Sub
End Class
End Class
End Namespace
End Class
如果您的目标是序列化,那么您的 class 名称在这方面并不重要。默认情况下,当序列化为 XML 时,属性很重要,可以使用 XmlElement(string)
属性覆盖 属性 名称的使用。例如,给定以下结构:
Public Class Z
Private _a As A2
<XmlElement("A")> _
Public Property a () As A2
Get
Return _a
Get End
Set (ByVal value As A2)
_a = value
End Set
End Property
Class A2
'......
End Class
End Class Z
将序列化为与 XML 相同的:
Public Class Z
Private _a As A2
<XmlElement("A")> _
Public Property ZZZZ () As A2
Get
Return _a
Get End
Set (ByVal value As A2)
_a = value
End Set
End Property
Class A2
'......
End Class
End Class Z
这也将序列化为与 XML 相同的内容:
Public Class Z
Private _a As ZZZZ
<XmlElement("A")> _
Public Property CDEF () As ZZZZ
Get
Return _a
Get End
Set (ByVal value As ZZZZ)
_a = value
End Set
End Property
Class ZZZZ
'......
End Class
End Class Z