2004-08-01から1ヶ月間の記事一覧
少なくとも、ソースコード互換性ができる限りとりたいわけで、#if とかで判別できる手段はないのだろうか?と軽くヘルプを流してみましたが、発見できませんでした。 C# の #if では論理式しか書けないので、Delphi 6 以前のような論理式になるのでしょうか.…
なんだかんだと、C# 2.0 やら .NET 2.0 やら Visual Studio .NET 2005 で遊んでいますが、予定通りだとリリースは The Visual Studio 2005 family of products will likely be released in the first half of 2005 なので、2005.08/F...つまり、まだあと1年…
なんとなく、Console とか class とか一般キーワードにひっかかるのがアレで、独自のキーワードを定義できるはてなグループを利用すれば、このあたりの単語のキーワードリンク先を変更できるからよいのではないか? とか思ったりしてというわけで、ちょっと…
8時間睡眠だと、一週間に112時間起きていて56時間寝ている。 私は、月曜〜金曜は18時間起きてて6時間寝ていて、土曜日は6時間起きてて18時間寝てて、日曜日は8時間睡眠だから……、あっ、ちょうど8時間睡眠の人と同じですね(笑)でも、今週は………
やはり、すでに人様の日記*1のコメントで書いているのですが、 interface IMath where T : IComparable, IFormattable, IConvertible, IComparable { T Add(left T, right T); } などとしたとき、プリミティブ数値型はすべて上記インターフェスを実装してい…
昔(id:ladybug:20040812)書きましたが、暗黙的実装を行った構造体が特殊化されたインスタンス化によってインライン展開&最適化されることは、仕様でも実装でもわかっています。int Add(int, int) なんてメソッドを int added = structure.Add(1, 2) とかし…
前の日記 id:ladybug:20040812 に対して id:akiramei:20040821 みたいな話が進んでいますが、Unit プロパティはちょっと難です。値型を利用すると .NET の Generics は特殊化したクラス実装を生成するため、メソッドは可能な限りインライン展開されるし、対…
ConditionalAttribute が class に対して適用できるようになりました。 とはいっても、そのクラスが特定コンディションに依存して存在変化するわけではなく、Attribute の派生クラスに対して設定することで、その属性の付与を制御できます。 [Conditinal("NU…
値型に対して null を代入可能とするコンテナクラス。HasValue と Value という2つのプロパティを主に利用する他、== および != による null との比較をサポートします。 C# では Int32 を int、Int64 を long と書けるように、Nullable<T> を T? と記述するこ</t>…
ちょっくらクラス紹介気味になっていきます...C# 2.0 というより .NET 2.0 ですね。このペースの紹介文章でも Generics は3日分くらい使いそうなので後々っ
Generics の文法を標準 C++ のテンプレートと似せて <T> としたため、C++ 同様に右シフト演算子(>>)と2重になった Typed-parameter(List<Nullable<int>>)の終端を区別する必要ができました。 このため、文法定義に right-shift と right-shift-assignment が追加され、op</nullable<int></t>…
名前でだいたい想像できますが、static member しか持たないクラスです。 常に abstract かつ sealed です。 常に System.Object から派生します。 インターフェスを実装できません。 const でないすべてのメンバは static である必要があります。 メンバは …
using の alias と似たようなものですが、異なるアセンブリに存在するまったく同じ名前のクラスを区別するための別名を定義します。 Foo.dll と Bar.dll に同じネームスペースを持つ class X が存在する場合、C# 1.2 では双方を区別するのが非常に面倒でした…
namespace ブロック内ではクラス名やネームスペースを相対指定できます。 using Foo; namespace A.B.C { // : public void method() { X.Y y = new X.Y(); } のようなとき、y は A.B.C.X.Y、A.B.X.Y、A.X.Y、Foo.X.Y, X.Y と検索されますが、このうち2つ以…
以下、あまり目だって取り上げられてない C# 2.0 の新機能をピックアップしてみました。 英語でどう書くのがよいんだろうか(苦笑)
まだベータなのでリリース時期で違っただけかもしれないし、正式リリースで同じ形式ならかまわないのですが、VS2003 と VS2005 beta と VC#2005 beta でプロジェクトファイルに互換性がありません。 というか、MSBuild に統一されるんだっけ?
Visual C# 2005 Express beta1 (English) にはあったコンソールウィンドウ*1が、Visual Studio 2005 Architect Edition beta1 (Japanese) には存在しない? そういえば Visual C# 2003 上でコンソールアプリを実行すると .bat にターゲットアプリを動かした…
そういえば、Microsoft Glossary の翻訳語対応表だったかな? ということで、http://www.microsoft.com/resources/glossary/default.mspx にアクセスするといろいろありました。 目的の L10N された Glossary は ftp://ftp.microsoft.com/developr/msdn/newu…
上記対応表を探していたら、Visual Studio 6.0 SP4 の修正項目に、 日本語版の Visual Studio 6 Service Pack 1、Service Pack 2、および Service Pack 3 では、リソース ID #1634 の "where" が日本語に翻訳 ("ローカライズ") されています。しかし、このリ…
そういえば、XMLコメントや設計書などで「インターフェス」「インターフェース」「インタフェース」みたいな仮名表記の揺れはみなさん統一されていますか?私は「インターフェス」と記述するのではてなキーワードでフェスがひっかかってしまいます。 昔は Mi…
日付いぢっちゃダメなのね。なんとなく「あ、木曜と日曜に日記書いてる?」と思って土曜日の日記の日付だけ日曜にしたら、空の日記が土曜日にできてしまった。 というわけで、雑多なことをここに追加するのであった。
Generics を利用した Hashtable とも言えるのが、この Dictionary クラス。 Hashtable 同様に扱えますが、所期サイズが3と非常に小さい、データ管理方法が Hashtable とはまったく異なるなど、細かくは見ていませんが、かなりの差異があるようです。
まず、前述したとおり IHashCodeProvider が Obsolete とマークされた。とは言え、たんに IHashCodeProvider と IComparer を個別に受け取っていたのを、この2つのインターフェスを1つにまとめた IKeyComparer を受け取るようになっただけなので、大きな問…
では、Hashtable は実際に何個のバケット(バケツ)にデータを分割して保存するのでしょうか? SDK ドキュメントでは Hashtable のバケットの数が素数であることしか記載されていないので、実際に動作させてデバッガなど確認するのが手早いと思えます。 確認…
.NET 1.1 では GetHashCode() の実装に注意が必要であるか、独自の GetHashCode() を提供しているクラスは結構ありますが、対象となるオブジェクトのハッシュ値を利用しているクラスは意外に少ないようで、ASP.NET の実装が使用しているというドキュメントは…
Equals() を override したんだけど GetHashCode() をどんな内容で override したらいいかわからない...って大丈夫ですか!? ということがたまに。 (1)〜(100)までのボールが1つのバケツに入っているとして、そこから(73)のボールを取り出すにはどうすればい…
予定通り Visual C# Express 2005 beta1 (英語) を削除して Visual Studio 2005 beta1 (日本語) に変更した。2005 になって簡易 Web Server が内蔵されたことで IIS の設定がどうこういった開発時のトラブルや、ソースコード一式が Web Server に保存されて…
実装は固定なのだから、プリミティブ型など多用される型の実装を毎回行う必要はなく public struct FROAPrimitive : IFROAble, IFROAble, IFROAble, IFROAble, IFROAble, IFROAble, IFROAble, IFROAble, IFROAble, IFROAble, IFROAble, IFROAble, IFROAble {…
とりあえず考えなしに、素直に制約インターフェスを書いてみる。 /// Four Rule Of Arithmetic -able public interface IFROAble { T Add(T left, T right); T Substract(T left, T right); T Multiply(T left, T right); T Divide(T left, T right); T Nega…
なぜっていわれても、まあ普通はやりたいわなー(苦笑 特に int や double みたいな型は非常によくパラメタライズされるし、.NET 2.0 だと値型はアセンブリ生成時に実装が実体化されるから、うまいことやればコンパイル時やJIT時にかなりの最適化がかけられ…