2004-08-01から1ヶ月間の記事一覧

.NET 2.0 に向けて

少なくとも、ソースコード互換性ができる限りとりたいわけで、#if とかで判別できる手段はないのだろうか?と軽くヘルプを流してみましたが、発見できませんでした。 C# の #if では論理式しか書けないので、Delphi 6 以前のような論理式になるのでしょうか.…

あと1年?

なんだかんだと、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時間睡眠の人と同じですね(笑)でも、今週は………

IFROAble あらため IMath

やはり、すでに人様の日記*1のコメントで書いているのですが、 interface IMath where T : IComparable, IFormattable, IConvertible, IComparable { T Add(left T, right T); } などとしたとき、プリミティブ数値型はすべて上記インターフェスを実装してい…

interface X を明示的実装した構造体を T where X で受け取ったときのメソッド呼び出しがどうなるか?

昔(id:ladybug:20040812)書きましたが、暗黙的実装を行った構造体が特殊化されたインスタンス化によってインライン展開&最適化されることは、仕様でも実装でもわかっています。int Add(int, int) なんてメソッドを int added = structure.Add(1, 2) とかし…

struct パフォーマンス向上の罠?

前の日記 id:ladybug:20040812 に対して id:akiramei:20040821 みたいな話が進んでいますが、Unit プロパティはちょっと難です。値型を利用すると .NET の Generics は特殊化したクラス実装を生成するため、メソッドは可能な限りインライン展開されるし、対…

Attribute and ConditionalAttribute

ConditionalAttribute が class に対して適用できるようになりました。 とはいっても、そのクラスが特定コンディションに依存して存在変化するわけではなく、Attribute の派生クラスに対して設定することで、その属性の付与を制御できます。 [Conditinal("NU…

Nullable`1

値型に対して null を代入可能とするコンテナクラス。HasValue と Value という2つのプロパティを主に利用する他、== および != による null との比較をサポートします。 C# では Int32 を int、Int64 を long と書けるように、Nullable<T> を T? と記述するこ</t>…

もっと C# 2.0

ちょっくらクラス紹介気味になっていきます...C# 2.0 というより .NET 2.0 ですね。このペースの紹介文章でも Generics は3日分くらい使いそうなので後々っ

right-shift operator

C#

Generics の文法を標準 C++ のテンプレートと似せて <T> としたため、C++ 同様に右シフト演算子(>>)と2重になった Typed-parameter(List<Nullable<int>>)の終端を区別する必要ができました。 このため、文法定義に right-shift と right-shift-assignment が追加され、op</nullable<int></t>…

static class

C#

名前でだいたい想像できますが、static member しか持たないクラスです。 常に abstract かつ sealed です。 常に System.Object から派生します。 インターフェスを実装できません。 const でないすべてのメンバは static である必要があります。 メンバは …

extern alias

C#

using の alias と似たようなものですが、異なるアセンブリに存在するまったく同じ名前のクラスを区別するための別名を定義します。 Foo.dll と Bar.dll に同じネームスペースを持つ class X が存在する場合、C# 1.2 では双方を区別するのが非常に面倒でした…

namespace alias qualifier

C#

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 pickup not pickup

C#

以下、あまり目だって取り上げられてない 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 にターゲットアプリを動かした…

Glossary

そういえば、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…

あふぅ

日付いぢっちゃダメなのね。なんとなく「あ、木曜と日曜に日記書いてる?」と思って土曜日の日記の日付だけ日曜にしたら、空の日記が土曜日にできてしまった。 というわけで、雑多なことをここに追加するのであった。

.NET 2.0 の Dictionary

Generics を利用した Hashtable とも言えるのが、この Dictionary クラス。 Hashtable 同様に扱えますが、所期サイズが3と非常に小さい、データ管理方法が Hashtable とはまったく異なるなど、細かくは見ていませんが、かなりの差異があるようです。

.NET 2.0 の Hashtable

まず、前述したとおり IHashCodeProvider が Obsolete とマークされた。とは言え、たんに IHashCodeProvider と IComparer を個別に受け取っていたのを、この2つのインターフェスを1つにまとめた IKeyComparer を受け取るようになっただけなので、大きな問…

.NET 1.1 の Hashtable

では、Hashtable は実際に何個のバケット(バケツ)にデータを分割して保存するのでしょうか? SDK ドキュメントでは Hashtable のバケットの数が素数であることしか記載されていないので、実際に動作させてデバッガなど確認するのが手早いと思えます。 確認…

.NET 1.1 とハッシュ値

.NET 1.1 では GetHashCode() の実装に注意が必要であるか、独自の GetHashCode() を提供しているクラスは結構ありますが、対象となるオブジェクトのハッシュ値を利用しているクラスは意外に少ないようで、ASP.NET の実装が使用しているというドキュメントは…

ハッシュ値

Equals() を override したんだけど GetHashCode() をどんな内容で override したらいいかわからない...って大丈夫ですか!? ということがたまに。 (1)〜(100)までのボールが1つのバケツに入っているとして、そこから(73)のボールを取り出すにはどうすればい…

Visual Studio 2005 beta1

予定通り 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…

なぜ Typed-parameter に対して演算したいのか?

なぜっていわれても、まあ普通はやりたいわなー(苦笑 特に int や double みたいな型は非常によくパラメタライズされるし、.NET 2.0 だと値型はアセンブリ生成時に実装が実体化されるから、うまいことやればコンパイル時やJIT時にかなりの最適化がかけられ…