2014-10-05 2 views
-1

Предполагая, объект со следующим кодом ...Элегантная модель для нескольких конструкторов

Public Sub New() 
    Me.Name = "Default Name" 
    Initialize() 
End Sub 

Public Sub New(CustomName as String) 
    Me.Name = CustomName 
    Initialize() 
End Sub 

Private Sub Initialize() 
    'Initialize some other properties 
End Sub 

Есть ли более элегантный шаблон для этого случая использования? Каким-то образом, когда один конструктор мог вызвать другой конструктор и устранить необходимость в методе Initialize()?

+0

'MyClass.New' будет вызывать другой ctor, такой как простой из того, который принимает строку; все код инициализации может быть только там. http://msdn.microsoft.com/en-us/library/b3b35kyk(v=vs.90).aspx – Plutonix

ответ

1

Да, вы могли бы написать один конструктор со всеми необходимыми параметрами, а затем записать остальные с вызовом Me.Constructor() без чего-либо еще в методе блок, который поставляет значения по умолчанию.

Public Sub New(CustomName as String) 
    Me.Name = CustomName 
End Sub 

Public Sub New() 
    Me.New("Default Name") 
End Sub 
+0

Именно то, что я искал. Спасибо. – DWRoelands

1

Я не уверен, есть ли синтаксис VB для цепочки конструкторов в смысле C#, но если я правильно помню, VB может вызывать другие конструкторы внутри, вызывая Me.New(). Это одно и то же. Таким образом, вы должны быть в состоянии сделать что-то вроде этого:

Public Sub New() 
    Me.New("Default Name") 
End Sub 

Public Sub New(CustomName as String) 
    Me.Name = CustomName 
    'Initialize some other properties 
End Sub 
Смежные вопросы