こんなコンソールアプリを作ってみた。VisualStudio2005ね。

まー、何のことはない、びっくり箱っぽいものなのだけれど。VB4脳がこれをどう作ったかというとだ、
Module Module1
'箱本体クラス
Private Class SurpriseBox
'箱の中身列挙
Private Enum InnerObj
None = 0
Pegion = 1
Cock = 2
Duck = 3
End Enum
'箱の中身用メンバ変数
Private _innerAnimal As InnerObj
Private _innerVoices() As String = {"しーん", "ででっぽー", "くわーーかっかっか", "あふ○ーーくっ"}
Private _innerAnswer() As String = {"からっぽ", "はと", "おんどり", "あふだっく"}
'何が入っていたかプロパティ
Public ReadOnly Property InnerAnswer() As String
Get
Return _innerAnswer(_innerAnimal)
End Get
End Property
'箱に何かをいれる操作
Public Sub SetSomething()
_innerAnimal = CType(CInt((Rnd() * 100) Mod _
[Enum].GetNames(GetType(InnerObj)).Length), SurpriseBox.InnerObj)
Console.WriteLine("ハコになんかはいったよ")
End Sub
'箱に触ったよイベント宣言
Private Event SomethingHappen()
'箱に触ったよイベントで動く処理
Private Sub OnSomethingHappen() Handles Me.SomethingHappen
Console.WriteLine(_innerVoices(_innerAnimal))
End Sub
'箱に触わる操作
Public Sub TouchBox()
Console.WriteLine("さわったね!!")
RaiseEvent SomethingHappen()
End Sub
End Class
'回数先生
Private Class BoxTeacher
'結局先生が何回触れるようにしてくれたのかを知らせるプロパティ
Public ReadOnly Property Count() As Integer
Get
Return _myCount
End Get
End Property
'メンバ変数
Private _limitCount As Integer
Private _myCount As Integer
'引数なしコンストラクタは最大10回としとく
Public Sub New()
_limitCount = 10
End Sub
'引数つきコンストラクタは最大回数指定
Public Sub New(ByVal pLimit As Integer)
_limitCount = pLimit
End Sub
'教えて!先生!
Public Sub TeachPlease()
TeacherTaking()
End Sub
'「教えて!」すると先生登場。さぁ俺の話を聞け!
Private Sub TeacherTaking()
Dim setCount As Integer = 0
'一応、再登場の時と挨拶が変わるらしい
If _myCount > 0 Then
Console.WriteLine(String.Format(" またあえたね!回数先生だ!こんども{0}回までOKだっ!", _limitCount))
Else
Console.WriteLine(String.Format(" やぁ!回数先生だ!さわりたい回数をいれようね!{0}回までOKだっ!", _limitCount))
End If
'入力まち
Dim setCountStr As String = Console.ReadLine
'ちゃんと数字がきたかどうかチェック
'TryParse を知った時は衝撃だった
If Integer.TryParse(setCountStr, setCount) = False Then
Console.WriteLine(" 数字入れなきゃ動かないよ")
Console.WriteLine(" 先生はざんねんだっ!")
_myCount = 0
Exit Sub
End If
'回数が範囲内なのかチェック
'OrElse を知った時は衝撃だった
If setCount < 1 OrElse setCount > _limitCount Then
Console.WriteLine(String.Format(" 回数は、1回から{0}回。お約束しようね!", _limitCount))
Console.WriteLine(" 先生はざんねんだっ!")
_myCount = 0
Exit Sub
End If
'メンバ変数に保存しておく。プロパティに直接触らせない。
'こういうやり方が隠蔽ってことらしい
_myCount = setCount
'さよなら回数先生
Console.WriteLine(" よぅし!よくやった!じゃ、先生は帰るよ!またなっ!")
End Sub
End Class
'メイン処理
Sub Main()
'変数初期化
Dim wRepeter As String = "Y"
Dim setCount As Integer = 0
Dim touchCount As Integer = 0
Dim setObj As Integer = Nothing
Dim myBox As New SurpriseBox
Dim myTeacher As New BoxTeacher
'Whileもすごいねー。DoLoopしか知らなかったので衝撃。
While (wRepeter.ToUpper = "Y")
'カウントアップも+=で書けるのが衝撃
touchCount += 1
'このあたりの作り方ってANSI-Cっぽいなんて思う
Console.Clear()
Console.WriteLine(String.Format("ハコをさわろう!何がでるかな? {0}回目!", touchCount))
'さわる回数は先生におまかせ
'つまり、メインでは回数のチェックとか入力まちとかしない。
'似たようなサブルーチン処理はVB4でもしていたけど、
'クラスという違う世界?で記載して、その中身完全隠蔽っぽいことするっていうのは
'意外と衝撃だったりする
myTeacher.TeachPlease()
'先生から回数おしえてもらうだけ。この回数も中でどうやってできてきたのかなんて
'メインは知らないでいい。うわー衝撃だw
setCount = myTeacher.Count
If setCount = 0 Then
Console.WriteLine("またきてね!")
Exit While
End If
Console.WriteLine(String.Format("{0}回ハコがさわれるよ!何がでるかな?", setCount))
'ここには書いてないのだけれど、Continueがさりげに使えるのも衝撃www
'ここもmyBoxの中身の動きは気にしない。
For i As Integer = 1 To setCount
Console.WriteLine(String.Format("{0}回目", i))
'どれかをハコにセットする準備
myBox.SetSomething()
'ハコをさわってみた
'ここで自作イベントが発生ですよ、これってすごいですよ!
myBox.TouchBox()
Console.WriteLine(String.Format("箱の中は……{0}!", myBox.InnerAnswer))
Next
Console.WriteLine("もっかいやる?[Y]")
wRepeter = Console.ReadLine()
End While
Console.WriteLine("お・し・ま・い♪")
Console.Read()
End Sub
End Module
って、こんな感じ。
AddressOfも出てこないし、コメントにあるとおり、衝撃だらけw
でも、これをリファレンスほとんど見ないで、インテリセンスに頼ってはいたけど、コード作ってテストできた自分をちょっとほめたい。.Netに出会って一年たって、なんかちょっと懐いてくれた様な感覚というか、そんな感じです。まーこれも、VB6をやっていればもうちょっと、衝撃度は低かったのかもしれないけど。
で、本題(おい)
If aInt => bInt Then
aInt = 0
End If
ってのを書いたら
If aInt >= bInt Then
aInt = 0
End If
って勝手に直してくれることに気づいた(笑)VisualStudio2005、貴方こまかいのね(笑)