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
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…
C#のメソッドは通常、Javaと同じで値渡し、もしくは参照の値渡しだけど、refやらoutやらつけることで参照渡しもできる。 まずはrefから。 static void Method(ref int i) { if (i < 0) i = 0; } で、呼び出し側はrefをつけて呼び出す。 int data = -10; Meth…
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…
Javaのfinalは意味がたくさんあるけど、その中で定数性を表すfinalに相当するのがこのconstとreadonly. C#のconstはかなり潔癖で、変数が少しでも絡むとコンパイルエラーとなる。 // エラー int n = 10; const int i = n == 0 ? 1 : 2; だけど、readonlyを使…
Disposeメソッドが例外で落ちたときでも他のDisposeメソッドが呼ばれるかどうか。 using System; class Program : IDisposable { private static int count = 0; private readonly int id = count++; public void Dispose() { Console.WriteLine("dispose {0…
C#ではICloneableなのにIDisposableなのか。 というのは置いといて、C++のデストラクタに近いのがDisposeメソッド。このメソッドはIDisposableインターフェイスのメソッドで、using文と併用することでRAIIなクラスが作れる。 class Program : IDisposable { …