我想将以下内容写入通用的抽象/接口,因此任何继承/扩展抽象类的类都有:
<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自己回答这个问题,所有其他网站在这个用例场景中似乎有点混乱
提前致谢!
答案 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#开发人员!