2015-08-25 63 views
0

有沒有辦法要求在聲明中爲對象類賦值?vb.net需要在聲明中賦值

舉例來說,如果我有:

Dim MyObject As New Library.ObjectClass 
MyObject = FunctionThatReturnsObject(Parameter) 

我可以更改對象類,以便它不能與「新」來聲明,並且必須使用爲:

Dim MyObject As Library.ObjectClass = FunctionThatReturnsObject(Parameter) 

我明白我可以爲ObjectClass構造一個調用FunctionThatReturnsObject的構造函數,但我一直讓ObjectClass的實例完全爲空,因爲我不知情地聲明它們而沒有分配它們。

有沒有辦法來防止這種情況?

+0

@Plutonix「你永遠需要新的,雖然創建對象」 - 不是真的,你可以讓''New' Private'(或'受保護'),事實上這通常是一個好主意。構造函數仍然存在,但不能由用戶直接調用,用戶必須改用構建函數。 –

+0

是的,我根據你想要如何去解決問題而困惑自己。 – Plutonix

回答

0

有沒有辦法來防止這種情況?

不完全是。你可以做的一件事是使構造函數Private,而不是提供一個返回一個構造對象的函數Public Shared。這有時是一件有用的事情,但它並不能解決您的實際問題:確保您類型的每個對象都被正確初始化。

因爲VB默認初始化所有聲明(但不初始化)的對象,有沒有辦法執行不同的初始化。

但是,你已經發布並沒有真正意義反正示例代碼:這是微不足道的,以防止下面的代碼:

Dim MyObject As New Library.ObjectClass 
MyObject = FunctionThatReturnsObject(Parameter) 

簡單地聲明一個構造函數的參數,或者使構造私有。這將阻止用戶使用New ObjectClass

0

的另一種方法是使用在類中定義的共享功能。共享功能將訪問同一班級的私人成員。得到一個新的MyObject的唯一方法是從主叫MyClass.FunctionThatReturnsObject()

Public Class MyClass 

    Private _parameter As String 

    Private Sub New() 


    End Sub 

    Private Sub New(parameter As String) 
     _parameter = parameter 
    End Sub 

    Public Shared Function FunctionThatReturnsObject() As MyClass 

     Dim myObject As New MyClass("a parameter") 

     'Or you could manipulate the private paraemters directly... 
     'myObject._parameter = "a parameter" 
     Return myObject 

    End Function 

End Class