2017-08-31 196 views
0

假設我有這樣的一個類:它有一個namesurname作爲屬性和一個msgboxes數據的單個函數。我應該使用這個函數的第一個變體還是第二個變體?更好的操作練習:類功能的參數

Private name As String 
Private surname As String 

Function do_something_1() As String 
    MsgBox("Hello, " & name & " " & surname) 
    do_something_1 = name & " " & surname 
End Function 

Function do_something_2(name As String, surname As String) As String 
    MsgBox("Hello, " & name & " " & surname) 
    do_something_2 = name & " " & surname 
End Function 

而在第二個功能的情況下,會在namesurname參數重載類的屬性?說如果班級屬性是JohnGreen,而函數調用JackBlack這將是msgboxed?

編輯:我知道在第一個版本中屬性也可以通過getters訪問,但我不想在這裏使用它。

+1

你需要的是屬性。 – cyboashu

+0

@cyboashu你是什麼意思? – Ans

回答

0

這是代碼如何看待屬性(如註釋中所述)。該課程名爲clsHuman

Option Explicit 

Private m_sName As String 
Private m_sSurname As String 

Public Property Get Name() As String 

    Name = m_sName 

End Property 

Public Property Get Surname() As String 

    Surname = m_sSurname 

End Property 

Public Property Let Surname(ByVal sNewValue As String) 

    m_sSurname = sNewValue 

End Property 

Public Property Let Name(ByVal sNewValue As String) 

    m_sName = sNewValue 

End Property 

Function do_something_1() As String 

    MsgBox ("Hello, " & Name & " " & Surname) 
    do_something_1 = Name & " " & Surname 

End Function 

Function do_something_2(myName As String, mySurname As String) As String 

    MsgBox ("Hello, " & myName & " " & mySurname) 
    do_something_2 = myName & " " & mySurname 

End Function 

一旦你有了這個類,你可以從這樣的模塊,稱之爲:

Option Explicit 

Public Sub TestMe() 

    Dim objHuman As New clsHuman 

    objHuman.Name = "Vit" 
    objHuman.Surname = "yata" 

    Debug.Print objHuman.do_something_1 
    Debug.Print objHuman.do_something_2("V", "D") 

End Sub 

正如你看到的,do_something_1顯示了在類對象的名稱MSGBOX和do_something_2用參數顯示msgbox。

編輯: 關於問題: 說,如果類屬性是約翰和綠色,而調用函數與傑克和黑色這將是msgboxed?答案是傑克和黑色。但屬性將留在約翰和格林。

+0

爲什麼要在課堂上使用getter和setter?我來自java,不記得它是一個需求。如果有什麼我習慣於利用私人屬性在整個班級內部都可見。無論如何,哪個變體**更好 - 具有屬性/ getters或函數參數?你的回答沒有回答。 – Ans

+0

@Ans - geters和setters是封裝。它是OOP支柱之一,也可以在Java中使用 - https://www.tutorialspoint.com/java/java_encapsulation.htm。一般來說,根據你想要做什麼,你可以使用這兩個選項中的任何一個。但是,關於你從Java到VBA,可能你正在期待函數重載。它有點不同 - https://stackoverflow.com/questions/64436/function-overloading-and-udf-in-excel-vba – Vityata

+0

我曾經認爲getters和setter只是爲了外部使用 - 訪問私有屬性的類。無論如何,這不是我的問題所在。我不想重載函數,我只想保留一個版本,只是不確定哪個更正確,更不容易出錯。 – Ans