Visual Basic 2005 には My という機能があります。開発の生産性の向上を謳っているようですが、実際のところどうなのでしょう?と、いうわけで自分なりに判断すべく実際にいろいろやってみます。おそらくマトモな資料になんかなりゃしませんけどねw
このあたり↓を参考にやります。
MSDN:My による開発(http://msdn2.microsoft.com/ja-jp/library/5btzf5yk(VS.80).aspx)
とりあえずVisual Studio 2005 でのインテリセンスを頼りに以下のようなコードを書いてみました。キーボードとマウスの状態を取得する内容です。
Imports System
Namespace Torikobito.DevelopmentWithMy
Public Class Program
<STAThread()> _
Public Shared Sub Main()
If My.Computer.Keyboard.CapsLock Then
Console.WriteLine("CapsLock が On ですね。")
End If
If My.Computer.Keyboard.CtrlKeyDown Then
Console.WriteLine("Ctrl キーを押してますね。")
End If
If My.Computer.Mouse.ButtonsSwapped Then
Console.WriteLine("マウスの左ボタンと右ボタンの機能を入れ替えましたね。")
End If
If My.Computer.Mouse.WheelExists Then
Console.WriteLine("マウスにスクロール ホイールが付いていますね。")
End If
End Sub
End Class
End Namespace
コレを My を使わずに書いてみますと・・・
Imports System
Imports System.Windows.Forms
Namespace Torikobito.DevelopmentWithoutMy
Public Class Program
<STAThread()> _
Public Shared Sub Main()
If Control.IsKeyLocked(Keys.CapsLock) Then
Console.WriteLine("CapsLock が On ですね。")
End If
If Control.ModifierKeys = Keys.Control Then
Console.WriteLine("Ctrl キーを押してますね。")
End If
If SystemInformation.MouseButtonsSwapped Then
Console.WriteLine("マウスの左ボタンと右ボタンの機能を入れ替えましたね。")
End If
If SystemInformation.MouseWheelPresent Then
Console.WriteLine("マウスにスクロール ホイールが付いていますね。")
End If
End Sub
End Class
End Namespace
・・・まぁまぁですね。(なにがだ?w
ただ、上の二つを書くに当たって大きな違いがありました。それは、My の方が直感的であることです。私の知識不足によるものでしょうが、Control クラスにIsKeyLocked メソッド や ModifierKeys プロパティがあることよりも(ましてやSystemInformation クラスの存在よりも)、My.Computer.Keyboard とタイプすることのほうがわかりやすいのが正直なところです。(My.Computer.KeyboardはMicrosoft.VisualBasic.Devices.Keyboard クラスです。)
しかし、おそらくこんな上澄みでは My を判断したことにはならないですね。なんだかいろいろ 'それっぽいもの' が出てきそうな予感がしますw なので次回以降に向けていろいろ調べてきます。(今からかよ!
# もし、これが.NET の誕生とともに存在していたなら数多くある批判も少しは減っていたかもしれませんね。(「こういう言語仕様なのだ。」というむりくりな納得を以ってw)後から出てきたものって考えると若干「なくてもできる部分はなくてもいいかも。」って気も。