C#

IFROAble あらため IMath

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

Attribute and ConditionalAttribute

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

Nullable`1

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

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 の新機能をピックアップしてみました。 英語でどう書くのがよいんだろうか(苦笑)