В VB есть ли способ создать экземпляр текущего типа без его имени? - PullRequest
1 голос
/ 08 июля 2020

То есть, я хочу сказать что-то вроде:

class Fwacbar
  public function MakeOne() as MyClass
    return new MyClass()
  end function
end class

Использование MyClass не работает, но я имею в виду, что находясь внутри класса Fwacbar, я хочу вернуть экземпляр Fwacbar.

Хорошо, я мог бы просто сказать «новый Fwacbar». Моя цель состоит в том, чтобы у меня была куча похожих классов, и я хочу иметь возможность вырезать и вставлять и вносить минимальные изменения. Было бы неплохо, если бы мне не пришлось менять все "новые". Для написания программы не обязательно иметь возможность сделать это, но я просто думал об этом, и если бы я знал способ сделать это, возможно, это было бы более ценно в другом месте.

1 Ответ

2 голосов
/ 08 июля 2020

Это определенно странный запрос ... но вот go:

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim f1 As New Fwacbar
        Dim f2 = f1.MakeOne
        Debug.Print("f1: " + f1.GetType.ToString)
        Debug.Print("f2: " + f2.GetType.ToString)
    End Sub

    Public Class Fwacbar

        Public Function MakeOne() As Object
            Return Me.GetType.GetConstructor(New System.Type() {}).Invoke(Nothing)
        End Function

    End Class

End Class
...