無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

VB.NETをつつく19−プロパティ1−読み取り専用プロパティ。何でも変更はまずいっすよ。

早速だけど、前回までに作ったクラスは致命的なミスがあるんだ。そのミスを示すコードを見てピヨね。
Public Class Module1

    Public Shared Sub Main()
        Dim tori As Bird = New Bird("インドリ", 29)
        tori.Move()
        Console.WriteLine("{0}参上!", tori.Name)
        tori.Talk()
        Console.WriteLine()

        Dim dre As Human = New Human("ドリィちゃん", 16)
        dre.Move()
        Console.WriteLine("{0}参上!", dre.Name)
        dre.Talk()
        Console.WriteLine()

        '名前も年齢も簡単に変えられる!
        Console.WriteLine("へーしん。")
        tori.Name = "怪盗20面相"
        tori.Age = 2000
        tori.Move()
        tori.Talk()
        Console.WriteLine()
    End Sub

End Class

これおかしいよね。だって、NameプロパティとAgeプロパティが何の制限もなく自由に変更できたら、 瞬間的に人や鳥が別人(別鳥)になってしまうから論理的におかしくなってしまうピヨ。 これじゃあ、まともな動物園のソフトはつれないよね。
これを防ぐにはプロパティを読み取り専用にすればいいピヨ。 やり方は簡単早速変更してみよう。
Public MustInherit Class Animal
    Private m_name As String
    
    '読み取りしか出来ない
    Public ReadOnly Property Name() As String
        Get
            Return m_name
        End Get
    End Property

    Private m_age As Integer
    Public Property Age() As Integer
        Get
            Return Me.m_age
        End Get
        Set(ByVal value As Integer)
            If value > 0 Then
                Me.m_age = value
            End If
        End Set
    End Property

    Public Sub New(ByVal name As String, ByVal age As Integer)
        Me.m_name = name
        Me.Age = age
    End Sub

    Public Overridable Sub Talk()
        Console.WriteLine("ワタシハ{0}。年は{1}だよ。", _
            Me.Name, Me.Age)
    End Sub

    Public MustOverride Sub Move()
End Class

Ageプロパティは年齢が変わる事があるからひとまずおいておくことにして、Nameプロパティを読み取り専用にしたピヨ。
まずは宣言にReadOnlyキーワードを付け加えて、
Set 
 プログラム 
End Set

を消すだけで良いんだ簡単だね。VBは一目で読み取り専用って分かるから良いよね。
でもこれじゃあ簡単すぎて、記事的に面白くないから一つ豆知識を披露するピヨ。
この消したSetはSetter(セッター)と呼び、Getは Getter(ゲッター)と呼ぶんだ。覚えておいて損は無いピヨ。
これでこの記事はお終い。次は何をつっつこうかな♪
別窓 | VB.NET | コメント:0 | トラックバック:0 | ∧top | under∨
<<C#をつつく20−プロパティ2−書き込み専用プロパティ。使う場面が思い浮かばない。 | 無差別に技術をついばむ鳥 | C++/CLIをつつく19−プロパティ1−読み取り専用プロパティ。ころころ変更はまずいっすよ。>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |