Во-первых, функция FromXml должна знать тип объекта, который необходимо создать и вернуть.
Для этого вы можете либо:
Передайте сам тип в качестве параметра:
Public Shared Function FromXml(ByVal source As XmlDocument, _
ByVal resultType As Type) As XmlObject
End Function
Использование Generics:
Public Shared Function FromXml(Of T)(ByVal source As XmlDocument) As XmlObject
End Function
(Используя Generics, вы также можете указать, например, «Of T as XmlObject», чтобы получать только в T класс, присваиваемый XmlObject).
Далее вам нужно будет решить, как создать новый объект переданного типа.
Вы можете либо исследовать точный переданный тип и соответственно создать новый экземпляр (жестко запрограммированный), либо использовать Reflection для вызова метода конструктора переданного типа (при условии, что он имеет доступный конструктор) (см. пример здесь ). Это может оказаться немного сложным, потому что если T не имеет пустых конструкторов, вам придется исследовать аргументы конструкторов и вызывать делегат matchin (опять же, используя Reflection).