オブジェクト指向らしくと考え始めると、何も作れなくなるので、素直にプロパティを使ってAnimalに名前も保持することにします。
takk@deb9:~/vbtest$ cat -n test.vb 1 Imports System.Console 2 3 Public Class Animal 4 Private _classname As String = "哺乳類" 5 Public ReadOnly Property Classname() As String 6 Get 7 Return _classname 8 End Get 9 End Property 10 Private _name As String 11 Public Property Name() As String 12 Get 13 Return _name 14 End Get 15 Set(ByVal value As String) 16 _name = value 17 End Set 18 End Property 19 20 Sub WhatIsThis() 21 WriteLine( _classname & "です") 22 WriteLine( "名前は" & _name & "と言います") 23 End Sub 24 End Class 25 26 Public Class TestClass 27 <STAThread()> _ 28 Shared Sub Main() 29 Dim animal As New Animal() 30 animal.Name = "動物ちゃん" 31 animal.WhatIsThis() 32 End Sub 33 34 End Class takk@deb9:~/vbtest$
あと、Tellメソッドも何をするメソッドか分かりにくいので、WhatIsThisという名前にしました。
ビルドして実行。
takk@deb9:~/vbtest$ vbnc test.vb ~省略~ mtakk@deb9:~/vbtest$ mono test.exe 哺乳類です 名前は動物ちゃんと言います takk@deb9:~/vbtest$
次は、プロパティにチェック処理を追加します。
10 Private _name As String 11 Public Property Name() As String 12 Get 13 Return _name 14 End Get 15 Set(ByVal value As String) 16 If value <> "" Then 17 _name = value 18 Else 19 WriteLine("名前をつけてください") 20 End If 21 End Set 22 End Property 23 ~省略~ 30 Public Class TestClass 31 <STAThread()> _ 32 Shared Sub Main() 33 Dim animal As New Animal() 34 animal.Name = "" 35 End Sub 36 37 End Class
文字列が””だったら、名前をつけてくださいのメッセージを表示する処理を追加しました。
takk@deb9:~/vbtest$ vbnc test.vb ~省略~ takk@deb9:~/vbtest$ mono test.exe 名前をつけてください takk@deb9:~/vbtest$
名前に文字列を指定した場合は、
30 Public Class TestClass 31 <STAThread()> _ 32 Shared Sub Main() 33 Dim animal As New Animal() 34 animal.Name = "動物ちゃん" 35 End Sub 36 37 End Class
このように実行時に、メッセージが出ません。
takk@deb9:~/vbtest$ vbnc test.vb ~省略~ takk@deb9:~/vbtest$ mono test.exe takk@deb9:~/vbtest$
チェック処理が使えるってのが、プロパティを使うメリットの一つですね。
コメント