重写为通用抽象类或接口

时间:2016-04-06 14:26:04

标签: vb.net

我想将以下内容写入通用的抽象/接口,因此任何继承/扩展抽象类的类都有:

<XmlRootAttribute("root")> _
Public Class myXMLCollection
    Inherits BatchFiles
    <XmlElement("data")> _
    Public Property myXMLCollection() As myXML()

End Class

root属性和元素可以根据使用上述内容的文件/类进行更改。

不知道从哪里开始。

来电者会这样做:

Dim myXMLDontKnowWhichOne as ImyXML (or the abstract class)
Dim type as Type
If xyz = True Then
 type = GetType(myXMLclassforAnotherFile)
Else
 type = GetType(myXMLclassgenericforallotherfiles)
End If

myXMLDontKnowWhichOne = System.Activator.CreateInstance(type)

Option Strict是On所以不能使用后期绑定的东西,并且需要它尽可能通用。

寻求建议并指出我正确的方向。希望我更多地了解OO自己回答这个问题,所有其他网站在这个用例场景中似乎有点混乱

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望拥有相同的属性myXMLCollection,但每个类具有不同的根名称和元素名称,并且在每种情况下都会继承BatchFiles。我说过使用了一个接口,但是因为你需要从另一个类继承,所以你必须使用一个抽象基类。

Public MustInherit Class myXMLCollectionBase
    Inherits BatchFiles

    Public MustOverride Property myXMLCollection() As myXML()

End Class

然后在每个实现中做

<XmlRootAttribute("root1")> _
Public Class myXMLclassforAnotherFile
    Inherits myXmlCollectionBase

    <XmlElement("data1")> _
    Public Property myXMLCollection() As myXML()

End Class

<XmlRootAttribute("root2")> _
Public Class myXMLclassgenericforallotherfiles
    Inherits myXmlCollectionBase

    <XmlElement("data2")> _
    Public Property myXMLCollection() As myXML()

End Class

然后你可以做你用激活器做的事情并创建一个类型的实例,但更好的是使用工厂,我称之为XmlFactory,这不是一个好名字。

Public Class XmlFactory

    Public Shared Function GetXml() As myXMLCollectionBase
         If xyz = True Then
            Return new myXMLclassforAnotherFile()
         Else
            Return new myXMLclassgenericforallotherfiles()
         End If
     End Function

End Class

对任何语法错误表示歉意 - 我更多的是C#开发人员!