C#で自作したクラスをforeach文で呼び出す

  • Day:2011.12.22 11:09
  • Cat:C#
自作したクラスをforeach文で呼び出したい場合は、
GetEnumeratorメソッドを実装します。

例えば、マップに配置されているパーツを管理するクラスがあり、
これらのパーツをマップクラスのインスタンスを通して
foreach文で呼び出す場合は以下のようになります。


class Map
{
private int[] parts = { 0, 1, 2 };

public IEnumerator<int> GetEnumerator()
{
foreach (int part in this.parts)
{
yield return part; // ここでパーツを返す
}
}
}

Map map = new Map();

foreach (int part in map)
{
Console.WriteLine(part);

// 出力
// 0
// 1
// 2
}
Effective C# 4.0
スポンサーサイト

C#でシングルトンパターンを実装する その2

  • Day:2011.12.21 23:20
  • Cat:C#
C#3.0からは、シングルトンパターンを
静的なメンバだけで構成される「静的クラス」を使って実現することができます。

public static class SampleClass
{
public static void SampleMethod()
{
}
}
静的クラスはstaticキーワードを付けるだけで記述できます。

SampleClass s = new SampleClass(); // エラー
静的クラスのインスタンスを作成しようとすると、以下のようなエラーが発生します。

静的クラス 'SampleClass' のインスタンスを作成することはできません。
'SampleClass' の変数を宣言することはできません

Effective C# 4.0

C#で名前付き引数を使用する

  • Day:2011.12.20 23:11
  • Cat:C#
C#4.0から名前付き引数が使えるようになりました。

private static void WriteParam(int strength, int defense)
{
Console.WriteLine("攻撃力:{0} 防御力:{1}", strength, defense);
}
例えば上記の関数は下記のように呼び出すことができます。

WriteParam(10, 5); // 攻撃力:10 防御力:5
WriteParam(strength : 10, defense : 5); // 攻撃力:10 防御力:5
WriteParam(defense : 5, strength : 10); // 攻撃力:10 防御力:5
下2つが名前付き引数を使用した関数呼び出しになります。

名前付き引数を使うことで引数の順番を気にする必要がなくなります。

Effective C# 4.0

C#で効率的に文字列を連結する

  • Day:2011.12.19 19:27
  • Cat:C#
C#で文字列の内容を変更するようなコードを書いたとしても、
実際には新しい文字列オブジェクトが生成されて、古いオブジェクトはガベージになります。


string msg = "Welcome ";
msg += "to ";
msg += "Koganeblog.";
これは次のコードに示すように非効率です。


// このコードはコンパイルできません
string msg = "Welcome ";
string tmp1 = new String(msg + "to ");
msg = tmp1; // "Welcome "はガベージになる。
string tmp2 = new String(msg + "Koganeblog.");
msg = tmp2; // "Welcome to "はガベージになる。
tmp1とtmp2、そして一番最初のmsg("Welcome ")がガベージになります。
stringクラスの+=メソッドでは、新しい文字列オブジェクトが生成されて、それが返されます。
既存のオブジェクトを変更して、別の文字列が連結された状態にすることはできません。

このような場合は、string.Format()メソッドを使用すると効率的です。


string msg = string.Format("{0}{1}{2}", "Welcome ", "to ", "Koganeblog.");
Effective C# 4.0

C#でキャストする

  • Day:2011.12.18 15:55
  • Cat:C#
C#で型変換を行う場合は、できる限りas演算子を使用します。


object o = Factory.GetObject();

MyType t = o as MyType;

if (t != null)
{
}
else
{
}

object o = Factory.GetObject();

try
{
MyType t;
t = (MyType)o;

if (t != null)
{
}
else
{
}
}
catch
{
}
キャストを行う場合には例外のキャッチと共にnullチェックを行う必要があります。
as演算子の場合には単にnullチェックを行うだけで済みます。

Effective C# 4.0
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。