我有类似以下的类:

Public Class Form1
    Private d As New Dings("dings")
End Class
Public Class Foo
    Public Sub New(ByVal aName As String)
        MsgBox("new Foo """ & aName & """")
    End Sub
End Class
Public Class Dings
    Public Property Name As String
    Public Property MyFoo As New Foo(Name)
    Public Sub New(ByVal aName As String)
        _Name = aName
    End Sub
End Class


我希望首先初始化Dings类的Name属性,但是反之,您有什么想法要实现这一点?
我知道,我也可以稍后在构造函数中创建foo对象(作为dings的成员)。
但是我想用这种方式,因为最后在Dings类中实例化了很多单例对象,我只想在一行中创建它们。
问候哦

####### E D I T #############

非常感谢你们俩。我想扩大我的问题:
关于C#,有没有可能按照我自己定义的顺序初始化变量?

最佳答案

为了回答C#问题,C#中的初始化顺序为:


所有内容均以该类型的默认值开头(null,0等)
作为字段声明一部分的赋值以文本顺序(即它们在源代码中出现的顺序)执行。注意,对于部分类,这会导致一些歧义。
基类构造函数被执行
构造函数体被执行


请注意,在C#中,您无论如何都无法编写此代码:

Public Property Name As String
Public Property MyFoo As New Foo(Name)



自动实现的属性不能将初始值作为声明的一部分
您不能将实例成员用作实例变量声明的一部分


为了说明我的意思,该类在C#中无效:

class Test
{
    string x;
    string y = x;
}


生成此编译时错误:


  Test.cs(6,16):错误CS0236:字段初始化程序无法引用非静态字段,方法或属性“ Test.x”

关于c# - 对象初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4821703/

10-16 08:55