Memo

SQL Server Management Studio でテーブルのデザインを変更できるようにする

いつも忘れるのでメモ。 SQL Server 2008 の SQL Server Management Studio では、テーブルのデザインを変更しようとしても、 変更の保存が許可されていません。行った変更には、次のテーブルを削除して再作成することが必要になります。再作成できないテー…

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

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…

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つけるだけで、このクラスはインスタンスの生成…

WindowsXPでのLinux相当のコマンド

ちょっと必要になったんで、調べた結果をメモしておく。 sudo runas /user:administrator に引数を渡したい場合はダブルクォートで囲む。 ps 普通は/Vオプションで詳細情報も表示する。 tasklist /V プロセスのサービスが見たいときは/Vのかわりに/SVCを指定…

エキサイト翻訳

エキサイト翻訳で、 hello:-) hello;-) hello:-( を翻訳にかけると・・・

UDoc

【ハウツー】クラス構造がまる見えに! UDocでJavaをダイナミックに分析する (1) JavaDoc、バイナリファイル、ソースコードからクラス図を生成 | エンタープライズ | マイナビニュース 便利そう。暇があったらいろいろいじりたいな。

古い環境を入手する

JavaではOracle Java Archiveから古い環境を入手することが可能。