Genericの型パラメータの制約に関するMSDNのページは修正されない

以前、以下のような記事を2008年5月に書いた。

フィードバックもした。

そういえば、MSDNライブラリの型パラメータの制約ページの構文を説明している箇所で

http://msdn.microsoft.com/ja-jp/library/d5x73970.aspx

where T:struct

where T:class

のままで良いのに、

where T:構造体

where T:クラス

になっていた。

翻訳されすぎ。

超今更な話だけどGenericの型パラメータの制約は便利だ – NAL-6295の舌先三寸

また、他の方がMSDNフォーラムでも2006年に指摘していて、

「次のリリースで修正させていただきます。」

と回答されている。

http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=250744&SiteID=7

2008年7月に修正されているようだけど、別の段落についてであって、この箇所については、修正されていない。

修正待ちリストは何年待ちになっているんだろうか。

Share
カテゴリー: .NET

厳密名の設定について

ふと思い立って、ライブラリに厳密名をつけようとして、ペアキーのファイルを作ったあと、CSPコンテナに格納したんだけど、今はもうファイルを直接参照するのが主流?

なぜかというとAssemblyInfoでAssemblyKeyNameを設定したらワーニングが出てしまったのだ。

それで、結局、VisualStudioでファイルを参照して設定することにした。

仕方ないんだろうけど、設定した時に自分のプロジェクトのルートにコピーされるのはどうなんだろうと思った。

Share
カテゴリー: .NET

MSDNの自動翻訳

自動翻訳でもソースコードは翻訳しないとか設定できないものなのかな。

インスタンスの生成の部分でnewが新しいになっていたりしたりその他いろいろと笑えない状況になっている。

Share
カテゴリー: .NET

いまさらながらクエリ通知とそのためのSQLDependencyクラスが超便利

今まで、マスタデータのキャッシングクラスを独自実装にしていたため、いろいろと面倒な事があったし処理が煩雑だったんだけど、SQLDependencyクラスを利用して実装しなおしたらコードはすっきるするわ、処理は軽くなるわで大満足。

実装自体も簡単にできるようになっているし、クエリ通知はSQLServer2005以降ならどのエディションでも対応しているので比較的楽に使える。

ちなみに、OracleでもODP.NETならOracleDependencyクラスというものが存在するらしい。(ODP.NETは使わないので未確認)

ああ、そういえば、ミニマムコードを作るときにSqlDependencyに渡すSqlCommandのSELECT文が”SELECT *”になっているとイベントが常にinValidで30分くらいはまりました。

ちゃんと列名を書いてあげたら解決しました。

Share
カテゴリー: .NET

.NETの質問を掲示板にしなくても解決する最も簡単な方法

.NETの質問を掲示板にしなくても解決する最も簡単な方法がある。

それは、

MSDNを参照する

ということ。

技術系の掲示板を見ていて昔からMSDNを参照すれば解決する問題が多いように感じている。

確かに、たまに分かりにくい記述はあるし、

最近、奇妙な翻訳になっているページもあるし、

翻訳してはいけないキーワードまで翻訳しすぎているページもあるけど、それでも、MSDNを参照して解決する問題は多い。

同じく、SQLServer関連の問題もBooks Onlineを参照すれば解決する問題が結構多い。

ぜひ、質問する前にMSDNやBooks Onlineを参照する事から初めてみてはいかがか。

Share
カテゴリー: .NET

.NET 4でD言語みたいにDesign By Contractを意識したコードが書けるようになる

nfoQでは昨年からC#をベースにして契約による設計をサポートするSpec#(リンク)を取り上げている。契約による設計は静的型付けのように、コンパイル時に検証されないと一定の動作を実行することができないという考え方だ。契約は通常、事前条件・事後条件という形を取る。例えば引数や戻り値がnullでない、あるいは一定の範囲内の値であるという条件がそうだ。

Spec#のような完全に新しい言語の学習がディベロッパの負担にならないように、Microsoftは言語を意識しなくてもいいようにライブラリを開発していて、これはどの.NET言語でも利用することができる。さて、ある種の契約はアサーションに似ているがその実はかなり異なっている。契約は静的なコード解析を組み合わせているため、コンパイラの内部でも外部でも契約を用いることができ、テストフレームワークも利用できる。また契約は実行可能であり、それゆえデバッグバージョン時にはアサーションのように振る舞う。次の例について考えてみよう。

InfoQ: .NET 4の新機能を探る:コード契約

.NET 4でD言語みたいにDesign By Contractを意識したコードが書けるようになるらしい。

事前条件、事後条件を言語仕様に盛り込んでほしいと思っていたので嬉しい。

特に事後条件のサポートが嬉しい。

事前条件は、言語仕様に盛り込まれていなくても比較的実装しやすかっったのだが、事後条件は場合によってはちょっとめんどくさかったのだ。

あとはいつ出るのか。本当に盛り込まれるのか。かな。

VB.NETに関して

Option Contract On

なんてオプションが追加されたら、嬉しいかも。

デフォルトOffで良いけど。

Share
カテゴリー: .NET

Visual Studio 2003でVisual SourceSafe 6.0dとの統合がされていない時や統合されなくなった時の解決策

Visual Studio 2003でVisual SourceSafe 6.0dとの統合がされていない時や統合されなくなった時の解決策を説明します。

Visual SourceSafe 6.0dのexeのあるフォルダ(スタートメニューのVSSのプロパティを見ればわかる)に

SSINT.EXE

というファイルがありますので、それを実行します。

統合セットアップが起動しますので、そのままOKボタンを押下し,

Installed was successfull.

というメッセージが出たら成功です。

参考

http://support.microsoft.com/kb/193583/ja

Share
カテゴリー: .NET

Windows Azureには、かなり期待している

マイクロソフトは、米国ロサンゼルス市で開催中のプロフェッショナル開発者会議(PDC2008)にて、以前より話題になっていたクラウドサービスである「Windows Azure」を発表した。

[PDC 2008]Windows Azureとは?:ITpro

Google App Engine+Pythonも楽しいけど、やっぱり実利を考えるなら慣れ親しんだテクノロジの方が良いからね。

まぁ、選択肢が増えるのは大歓迎です。

Share
カテゴリー: .NET

Formを閉じる時だけValidatingイベント内での検証をやめる方法

フォームに貼り付けたコントロールのValidatingイベントハンドラ内で

if(!this.CauseValidation && this.ActiveControl == 元のコントロール)
{
return;
}
if (!this.ActiveControl.CausesValidation)
{
return;
}

とする。

×ボタンで閉じる時は、元のコントロールがアクティブなままなので、ActiveControlが元のコントロールだったら抜ける。

本来、ActiveControlのCauseValidationがfalseの時は、Validatingイベントが発生しないはずなので、Validatingイベント内で、ActiveControlのCauseValidationがfalseである事を確認したらreturnで抜ける。

カスタムコントロールの実装時には、OnValidatingをオーバライドして、base.OnVvalidating()を呼ぶまえに

System.Windows.Forms.Control 親コントロール = this.Parent;
while (親コントロール != null)
{
if (親コントロール is System.Windows.Forms.Form)
{
if (親コントロール.CausesValidation)
{
break;
}
if ((親コントロール as System.Windows.Forms.Form).ActiveControl == this)
{
return;
}
if (!(親コントロール as System.Windows.Forms.Form).ActiveControl.CausesValidation)
{
return;
}
}
親コントロール= 親コントロール.Parent;
}

とする。

基本的には、フォームに貼り付けた場合と同じで、追加された実装はFormコントロールを見つけるまで親を遡る事。

Share