如何在项目vb.net中声明两个具有相同名称的类

时间:2015-11-09 12:15:37

标签: 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
            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类'A'和类'A',在名称空间'BSSystemControl'中的'C:\ TFS \ SigaCom \ BsControl System 2014 \ BsSystem \ nfe \ A.vb'冲突中声明。 C:\ TFS \ SigaCom \ BsControl System 2014 \ BsSystem \ nfe \ impostoDevol.VB 12 7 BSControl

如果我将A类声明放在Z Scope类中,我收到以下消息:

错误4'A'已在此类中声明为'公共属性A A'。 C:\ TFS \ SigaCom \ BsControl System 2014 \ BsSystem \ nfe \ impostoDevol.VB 12 11 BSControl

2 个答案:

答案 0 :(得分:2)

如果您的目标是序列化,那么您的班级名称在这方面无关紧要。默认情况下,在序列化为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

答案 1 :(得分:1)

您的成员的命名不遵循命名约定。私有对象应该在camelCase中命名,避免在开始,结束时使用“_”字符,也不要在中间使用TitleCase中的公共属性和类,名称应该是直观的,一种较大名称的短名称。

其次,我认为你所曝光的场景照片根本不需要背景场。

无论如何,为了解决你只是将具有相同类名的每个类移动到具有不同名称的不同命名空间的问题,这样可以避免歧义,但这种编程风格是不正确的。

如果我理解得很好,这就是你打算做的事情?:

with tbl (Customer,Order_Number) as
(select 'ABC',123 from dual union all
select 'ABC',456 from dual union all
select 'XYZ',789 from dual union all
select 'MNO',987 from dual union all
select 'XYZ',654 from dual)
 --recreating the source table
select customer,Order_Number from (
select t.*, count(customer) over (partition by customer) as cnt from tbl t)
where cnt =1