2017-08-31 24 views
0

私はこのようなクラスを持っているとします。それは属性としてnamesurnameとmsgboxのデータを持つ単一の関数を持っています。この関数の最初の変種か2番目の変種を使うべきですか?クラスの関数の引数

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 

第2の機能の場合は、namesurname引数がクラス属性をオーバーロードでしょうか?クラス属性がJohnGreenで、関数がJackBlackで呼び出されているのにmsgboxedとすればいいですか?

EDIT:最初のバージョンでは、属性にゲッターでアクセスすることもできますが、ここでは使用しないことをお勧めします。

+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は、クラス内のオブジェクトの名前とメッセージボックスを表示し、do_something_2 msgboxにパラメータを表示します。

編集: 質問に関して: セイをクラス属性は、ジョンと緑である場合、関数はmsgboxedされるだろうジャック・ブラックと呼ばれながら?答えはジャックとブラックです。しかし属性はJohnとGreenのままです。

+0

gettersとsettersをクラス内で使用するのはなぜですか?私はJavaから来て、それが要件であることを覚えていない。何かがある場合、私はすべてのクラスの中で見える私的な属性を利用するために使用されています。とにかく**どの変種**が**より優れています - 属性/ゲッターや関数の引数で?あなたは答えても答えません。 – Ans

+0

@Ans - ゲッターとセッターはカプセル化されています。これはOOPの柱の1つで、Java(https://www.tutorialspoint.com/java/java_encapsulation.htm)でも利用できます。一般に、あなたがやりたいことに応じて、これらの2つのオプションを使うことができます。しかし、あなたがJavaからVBAに来るということに関しては、たぶんあなたは関数のオーバーロードが予想されます。それはちょっと違う - https://stackoverflow.com/questions/64436/function-overloading-and-udf-in-excel-vba – Vityata

+0

私は、ゲッターとセッターが外での使用のためであると思っていました - 私的な属性にアクセスするクラスのそれにもかかわらず、それは私の質問についてではなかった。そして、私は関数をオーバーロードしないでください、私は1つだけのバージョンを保持したい、ちょうどより正確でエラーが起こりにくいかわからない。 – Ans

関連する問題