2007-12-14から1日間の記事一覧

構造体

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…