同様の処理をVisual Basicなどのプログラミング言語で行うとループで回す処理が必要になります。Visual Studio 2008では繰り返し処理を簡潔に書けるように標準クエリ演算子とシンタックスシュガーである.NET統合言語クエリ(LINQ)が導入されました。モデルになっているのはデータベースに使われるSQLで複数行の計算を一文で書けます。SELECTはフィルタリング、INSERTは挿入、DELETEは削除、UPDATEは更新を行います。
1
UPDATE TableName SET D=A*B WHERE C<1000
このうちLINQではSELECTを処理してくれます。そのため上に書いた式で「A*B WHERE C<1000」の複数行の結果を作り出すことはできても素直な方法ではDへの代入はできないので、最終的にはループを回して代入する必要があります。
Visual BasicとC#、変換ツールが存在するほど互換性の高い言語ですが、いざどちらを使うかとなると判断に困ることもあります。Visual BasicとC#の比較については書籍が発行されていたり、他のWebサイト上でも同様の記述はたくさんありますが、私見を書いてみました。Visual Studio 2015時点で比較しています。
NETFrameworkは汎用的なフレームワークなので、データバインディングについてもデータベース連結だけをターゲットに組まれているわけではありません。そのため、データベース応用システム開発に使用した場合、Accessなどのテータベース開発ツールと比べると少しずつ回りくどいというか使いにくい面があります。そのためデータバインディングやTableAdapterなどの枠組みを使わずもっと単純なクラスのみを使って開発するPONO(Plain Old Net Object)という考え方があるようです。もともとはPOJOから派生した言葉らしいです。Visual Basic 6においてもDataEnvironmentを使って開発する方は意外に少なかったと記憶しています。
PublicClass OpenFormCommand(Of TForm As {Form, New}) Dim _form As TForm
PublicSub Execute(ByVal sender AsObject, ByVal e As EventArgs) If _form IsNothingOrElse _form.IsDisposed Then _form = New TForm _form.Show() _form.BringToFront() EndSub EndClass
NET Frameworkでは出来合いのコントロールから継承して新たなカスタムコントロールを作ることができます。そこでカスタムコントロールのコンストラクタでBackColorプロパティに望みの色を設定するようにすれば良さそうです。しかしそれだけではコンストラクタとInitializeComponentメソッドで2回設定され無駄が生じますしIDE操作の上でも望ましいと言えません。これを解決するためにはBackColorプロパティにDefaultValue属性を設定します。
Net Framework 2.0ではジェネリックが搭載されました。ジェネリックについては以前に型総称性で紹介しました。このときにはC++でテンプレートが使えたもののJava Genericは搭載されたばかりで盛んに使われている状況にはありませんでした。今ではNet Frameworkに当然のようにクラスライブラリに使われ、アプリケーションプログラマにとっても身近な存在になったと感じています。
PublicFunction IIf(Of T)(ByVal expression AsBoolean, ByVal truePart As T, ByVal falsePart As T) As T If expression ThenReturn truePart ElseReturn falsePart EndFunction