如何在vb.net项目中声明同名的两个类
我从vb.net开始,将我的项目vb6迁移到vb.net。 在我的项目中,我在一个文件中有一个名为a的类,声明如下:如何在vb.net项目中声明同名的两个类,vb.net,class,xml-serialization,subclass,Vb.net,Class,Xml Serialization,Subclass,我从vb.net开始,将我的项目vb6迁移到vb.net。 在我的项目中,我在一个文件中有一个名为a的类,声明如下: Public Class A ..... End Class 在另一个文件中,我必须声明另一个本地使用的类,该类的名称与前面在另一个文件(类A)中声明的类名相同。 但这两个阶层是不同的 然后我尝试了以下方法: Public Class Z Private _a As A Public Property a () As A Get
Public Class A
.....
End Class
在另一个文件中,我必须声明另一个本地使用的类,该类的名称与前面在另一个文件(类A)中声明的类名相同。
但这两个阶层是不同的
然后我尝试了以下方法:
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
然后我尝试了以下方法:
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时,我可以访问本地类A
但我有一条错误信息,上面写着:
错误4命名空间“BSSystemControl”中的“C:\TFS\SigaCom\BsControl System 2014\BsSystem\nfe\A.vb”冲突中声明的类“A”和类“A”。C:\TFS\SigaCom\B控制系统2014\BsSystem\nfe\impostoDevol.VB 12 7 B控制
如果我将Class A语句放在Class Z范围内,则得到以下消息:
错误4“A”已在此类中声明为“公共属性A”。C:\TFS\SigaCom\b控制系统2014\BsSystem\nfe\impostoDevol.VB 12 11 b控制您的成员的命名不遵循命名约定。在CAMELCASE中应该命名私有对象,避免在开始、结束时使用“*”字符,也不在中间,公共属性和TitleCase中的类,而且,名称应该是直观的,更大的名称的一种短名称。 其次,我认为你根本不需要为你所暴露的场景设置背景 无论如何,要解决这样一个问题,即只需将具有相同类名的每个类移动到具有不同名称的不同名称空间,这样可以避免歧义,但这种编程方式是不正确的 如果我理解的很好,这就是你想要做的
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
如果您的目标是序列化,那么类名在这方面并不重要。默认情况下,将属性序列化为XML时,可以使用
xmlement(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
公共类Z
二等兵
_
公共财产a()作为A2
得到
返回a
结束
设置(ByVal值为A2)
_a=值
端集
端属性
A2类
'......
末级
端类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
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
公共类Z
二等兵
_
公共财产ZZZ()作为A2
得到
返回a
结束
设置(ByVal值为A2)
_a=值
端集
端属性
A2类
'......
末级
端类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
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
公共类Z
私人(如ZZZZ)
_
公共财产CDEF()作为ZZZZ
得到
返回a
结束
设置(ByVal值为ZZZZ)
_a=值
端集
端属性
类ZZZZ
'......
末级
端类Z
我的第一个问题是。。。这个命名方案有什么要求吗?也许你可以概括地描述一下你希望达到的目标是什么。这将有助于提供一个有适当背景的合理答案。(注意:VB不区分大小写,因此属性a
与嵌套类a
相同)默认情况下,Xml序列化将从属性名称中删除(类型无关紧要,因此可以根据需要命名类)和/或在这些属性上使用XmlElement(字符串)属性。是的。此约定的方案是通过序列化生成将由webservice使用的XML文件。我正在使用XSD创建类。XSD在字段中有:det.imposito.ipi,它有多个字段。同一个XSD有一个字段:det.impostoDevol.ipi有其他字段(实际上只有一个)。这样我就需要有相同的名称空间,有两个ipi类。