Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在VB中,有没有一种方法可以创建当前类型的实例而不命名它?_Vb.net_Class_Oop - Fatal编程技术网

Vb.net 在VB中,有没有一种方法可以创建当前类型的实例而不命名它?

Vb.net 在VB中,有没有一种方法可以创建当前类型的实例而不命名它?,vb.net,class,oop,Vb.net,Class,Oop,我的意思是,我想说: class Fwacbar public function MakeOne() as MyClass return new MyClass() end function end class 使用MyClass不起作用,但我的意思是,由于我在类Fwacbar中,我想返回一个Fwacbar实例 好吧,我可以说“新的Fwacbar”。我的目标是,我有一堆类似的类,我希望能够剪切和粘贴,并且必须进行最小的更改。如果我不必改变所有的“新的”就好了。写程序时不一定要做

我的意思是,我想说:

class Fwacbar
  public function MakeOne() as MyClass
    return new MyClass()
  end function
end class
使用MyClass不起作用,但我的意思是,由于我在类Fwacbar中,我想返回一个Fwacbar实例


好吧,我可以说“新的Fwacbar”。我的目标是,我有一堆类似的类,我希望能够剪切和粘贴,并且必须进行最小的更改。如果我不必改变所有的“新的”就好了。写程序时不一定要做到这一点,但我只是在想,如果我知道一种方法,也许它在其他地方会更有价值。

这肯定是一个奇怪的要求……但你可以这样做:

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

虽然可能有一个解决方案,但我还是被困在了为什么?键入Dim foo=new Fwacbar和Dim foo=Fwacbar.MakeOne()之间有什么区别。似乎更多的输入和混淆了你的代码你有更好的例子吗?这就像你想要一个
工厂(T的{new})
而不需要工厂。如上所述,正如您也提到的,这与dim inst As new Something()相同。“我希望能够剪切和粘贴,并且必须进行最小的更改。”但为什么要将相同的代码行复制到多个位置?最好将类和代码结构设计为完全不需要这样的复制/粘贴。没有好的方法可以实现您想要的。有办法,所以必要时可以做,但没有好办法,所以不必要时不要做。作为记录,该方法应该是
共享的
@SeanSkelly-Sure。我不得不用类似的代码创建一堆类,这让我很恼火。我的同事们已经开发出了大量几乎相同的类,我正在努力使用更通用的代码。我正在尝试将尽可能多的代码放入一个超类中。如果您假设一个无参数构造函数,并且返回类型可以是Object,为什么不将MakeOne更改为
return Activator.CreateInstance(Me.GetType)
?甚至更干净。(需要OP提供更多上下文,以了解这两个假设是否正确。)