オブジェクト指向らしくと考え始めると、何も作れなくなるので、素直にプロパティを使って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$
チェック処理が使えるってのが、プロパティを使うメリットの一つですね。


コメント