読者です 読者をやめる 読者になる 読者になる

ChalkTalk CLR – 動的コード生成技術(式木・IL等)に行ってきた

centerclr.doorkeeper.jp 直前で定員を増やしてもらえたので、参加できました。 会自体について 内容は主にILの話と式木の話で、ディスカッションというよりは講義に近い感じでした。 個人的にはディスカッション寄りの会を期待していたのですが、知識レベル…

.NET言語の例外事情

エラーの発生および処理のガイドラインこんなページ見つけた。 このページによると・・・ ほとんどの場合は、定義済みの例外の型を使用します。新しい型の例外を定義するのは、クラス ライブラリを使用する開発者がその新しい例外型をキャッチし、その型自体…

画面が青いよ!

Public Shared Function IsAlpha(ByVal str As String) As Boolean If IsNothing(str) Then Return False End If For Each ch As Char In str.ToCharArray If Not Char.IsLetter(ch) Then Return False End If Next Return True End Function

やる気が・・・

心の底からやりたくないと思った言語は始めてだ・・・ VB.NETとか言ってもN88 BASICとそんなにかわらねーだろ、とか思っていたのが間違いだった。N88 BASICがいいものかどうかは別にして、N88 BASICは「やりたくない」とは思わなかった。 でもVB.NETにはしょ…

VB.NETやべぇ

これはきっと何かの嫌がらせだ。 予約語一覧 AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType Date D…

明示的なインターフェイスメンバの実装

C#ではインターフェイスメンバを明示的に実装することで、複数のインターフェイスに同じシグネチャのメソッドがあった場合に個別に実装することができる。 using System; interface IHoge { void Method(); } interface IPiyo { void Method(); } class Hoge…

インターフェイス

C#のインターフェイスはJavaのインターフェイスと基本的には同じだが、異なる部分もある。 まず、C#のインターフェイスには定数が記述できない。更に、ネストした型を宣言することも出来ない。 前者は許せるのだが、後者は慣れが必要そうだ。まぁC#にはinter…

構造体

C++の構造体とクラスはデフォルトのアクセスレベルが違うだけで、それ以外は全く同じだが、C#の構造体とクラスはかなりの違いがある。 class struct 格納場所 ヒープ スタック*1 継承 可 不可*2 *3 メンバの制限 なし あり*4 フィールドの宣言箇所での初期化…

演算子のオーバーロード

C++と同様、C#も演算子をオーバーロードすることができる。ただし、staticメソッドである必要がある。 が、結構面倒なのであまり使わないかも。

シールメソッド

この本には載ってなかったけど、シールクラスと同様、メソッドにsealedをつけるとオーバーライドを不可能にできる*1。 *1:ただし隠蔽は可能

抽象クラス

C#の抽象クラス自体はJavaとほとんど同じだが、抽象クラスを継承してクラスを作る場合、C#ではここでもovrerideキーワードを使用する必要がある。 using System; abstract class Base { public abstract void Method(); } class Sub : Base { // overrideが…

ネステッドクラス

C#のネステッドクラスはJavaのstaticなメンバクラスと同じようなもので、C#には非staticなメンバクラスは存在しない*1。 また、クラスだけじゃなくてインターフェイスや構造体、列挙体もネストさせることができる。 class Outer { class NestedClass {} inte…

ボックス化、ボックス化解除

ボックス化はJavaのオートボクシングと同じようなものだけど、ボックス化解除とJavaのオートアンボクシングは前者に比べて違いが大きい。 ボックス化は値型を参照型として扱うための仕組みで、Javaのオートボクシングのようなもの。 // intはSystem.Int32の…

Objectクラス

C#もJavaと同様、全てのクラスは必ずObjectクラスを継承していることになる。また、構造体もObjectクラスを継承している*1。 Objectクラスは引数なしのコンストラクタと、いくつかのメソッドを持っている。 宣言 概要 public virtual bool Equals(Object obj…

staticメソッド

C#ではJavaと違って、インスタンス経由でstaticメソッドを呼ぶことは出来ない。

refとout

C#のメソッドは通常、Javaと同じで値渡し、もしくは参照の値渡しだけど、refやらoutやらつけることで参照渡しもできる。 まずはrefから。 static void Method(ref int i) { if (i < 0) i = 0; } で、呼び出し側はrefをつけて呼び出す。 int data = -10; Meth…

シールクラス

Javaのfinalなクラスと同じ。 sealed class SealClass {} これは、Javaの場合 final class FinalClass {} こう書くのと同じ。Javaは同じキーワードを使いまわすけど、C#は別の役割のものには別のキーワードを割り当ててるみたい。

ポリモーフィックなメソッド

C#はポリモーフィックなメソッドに関して、Javaに比べて少し複雑になっている。 using System; class Base { public void Method() { Console.WriteLine("base class"); } } class Sub : Base { public void Method() { Console.WriteLine("sub class"); } }…

他のコンストラクタの呼び出し

スーパークラスのコンストラクタの呼び出しとオーバーロードされたコンストラクタの呼び出しはC++とJavaの中間のような感じ。 class Hoge { public Hoge(int i) {} // オーバーロードされたコンストラクタの呼び出し public Hoge() : this(10) {} } class Ex…

言語仕様

C# Language Specificationネットに言語仕様があるのはありがたいんだけど、MSDNの中、しかも変に凝ってるため非常に読みにくい。 確かC#ってJIS化してたような・・・プログラム言語 C#これか。うーん高い。会社に買ってもらおう。

constとreadonly

Javaのfinalは意味がたくさんあるけど、その中で定数性を表すfinalに相当するのがこのconstとreadonly. C#のconstはかなり潔癖で、変数が少しでも絡むとコンパイルエラーとなる。 // エラー int n = 10; const int i = n == 0 ? 1 : 2; だけど、readonlyを使…

プロパティ

プロパティは表記としてはフィールドへのアクセスだけど、中身はメソッドとして実装されている。 要は、アクセサメソッドって呼び出し面倒だし、直感的じゃないよねー、ということで出てきたものなんだと思う。 using System; class Program { private int d…

IDisposable(2)

Disposeメソッドが例外で落ちたときでも他のDisposeメソッドが呼ばれるかどうか。 using System; class Program : IDisposable { private static int count = 0; private readonly int id = count++; public void Dispose() { Console.WriteLine("dispose {0…

IDisposable

C#ではICloneableなのにIDisposableなのか。 というのは置いといて、C++のデストラクタに近いのがDisposeメソッド。このメソッドはIDisposableインターフェイスのメソッドで、using文と併用することでRAIIなクラスが作れる。 class Program : IDisposable { …

デストラクタ

C#のデストラクタはC++のデストラクタより、Javaのファイナライザに近い。 ~SomeClass() { ... } こんな感じで書き方としてはC++と同じだけど、 protected override void Finalize() { try { ... } finally { base.Finalize(); } } な感じに変換。 これをJav…

staticクラス

C#でインスタンスの生成が不可能なユーティリティ用クラスを作る場合、staticクラスというのが使えるらしい。 static class SomeUtils { public static void SomeMethod() { ... } } こんな感じでclassにstaticつけるだけで、このクラスはインスタンスの生成…

C#

なんか仕事で使いそうな勢いだからプログラミングC#―C#2.0/.NET2.0/Visual Studio2005対応作者: ジェシーリバティ,Jesse Liberty,鈴木幸敏,首藤一幸,情報技研出版社/メーカー: オライリージャパン発売日: 2006/02メディア: 単行本購入: 1人 クリック: 22回こ…