C++->C#の違いの覚書2

  • 仮想メソッド(virtual)では、抽象メソッドのように基本クラスが派生クラスにメソッドの実装を要求するのではなく、サブクラスに新しいメソッドの提供を許可する


class a{
virtual void aa():
}
class b : a{
overrider void aa();
}

  • newキーワードにより、派生クラスにて基本クラスの仮想メソッドを隠ぺいすることができる


class a{
public virtual void aa(){
}
class b : a{
new public void aa(){
}

  • 構造体のメンバの規定のアクセスレベルはPrivate
  • friendキーワードはない
  • interfaceはクラスと異なり、メンバ変数を持たずメソッドの実装も持たずインスタンス化もできない。
    またinterfaceを実装するクラスはinterfaceの全メソッドを実装しなければならない
  • 例外オブジェクトのメソッドとして、StackTrace()やMessage()等がある
  • try〜catch.*〜finally
    catchにて再スローする場合でも、該メソッドを離れる前にfinally句が処理される
  • cast失敗時には例外が発生するが as を用いると例外は発生せずnullが参照設定される
    Dog d = animal as Dog;
  • 構造体は継承できないがインタフェースを継承できる
  • 構造体にコンストラクタを定義する場合には、必ずパラメータが必要
  • enumの列挙子はenumの型名を指定しなければならない
    enum Color { red, blue, yellow };
    Color a = Color.red;
  • @演算子を使用することで、@"c:\temp"は\エスケープが不要となる
  • 変数が値型なのか参照型なのかをコンパイラが判断して、スタックかヒープかを決定
    ex)int aa = new int()としてもaaはスタックで管理される値型変数である
  • 値型の変数を参照型の変数として扱う方法をボクシングといい暗黙的に行われる
    しかしその逆は明示的にキャストする必要がある
    (アンボクシングによりデータが失われるような場合は、例外がスローされる)
  • 参照型変数の初期値はnull
  • 配列の要素数はxxx.lengthでわかる
  • 配列の複製にはxxx.clone()を使用するが、配列が参照型の場合は参照先のObjectが複製される訳ではない
  • ArrayクラスのClear静的メソッドを使用すると、配列要素を0またはnullに設定して削除することができる。
    ex)全部消すならArray.Clear( xxx, 0, xxx.Length );とする
  • ArrayクラスのReverse静的メソッドを使用すると、配列要素を逆にできる
  • ArrayクラスのSort静的メソッドを使用すると、ソートできる
  • 4角形配列は string[,,] xx = new string[5,2,3];とかで定義でき、xxx.GetLength(0)とできる
  • ジャグ配列の場合はstring xxx = new stringと定義して使う
  • 異なる参照変数が同じオブジェクトを指しているかは、(object)とキャストする