.NET2.0からジェネリックが使えるようになり皆さんバンバン使われてると思いますが使い道の基本はやっぱりコレクションクラスでしょうか?
なので今回は他の使い方を紹介します
ファクトリメソッドで使う
あんまり見かけない例だと思ったのでファクトリメソッドで使ってみる例を。
public static class TableAdapterFactory
{
public static T GetTableAdapter<T>(SqlConnection con, int timeoutSec) where T : new()
{
T adapter = new T();
Type type = adapter.GetType();
PropertyInfo property = type.GetProperty("Connection");
property.SetValue(adapter, con, null);
MethodInfo method = type.GetMethod("SetCommandTimeout");
if (method == null)
{
throw new TargetException("SetCommandTimeoutが存在しません");
}
method.Invoke(adapter, new object[] { timeoutSec });
return adapter;
}
}
※中でやってることはそれぞれ書き換えてください。この例では
ちょっとした事なんですがリフレクションと組み合わせると定型処理がいろいろまとめられちゃったりします。
Converter<T, TOutput>は面白い
あまりきれいな例じゃないんですがとりあえずこちらを
public int HogeHoge
{
:
:
Converter<TreeNode, TreeNode> func = null;
func = delegate(TreeNode src)
{
if (((PartsBookItemArgs)src.Tag).Item is PartsBookItemArgs.Infoページ構成)
return src;
else if (((PartsBookItemArgs)src.Parent.Tag).Item is InfomationType)
return func(src.Parent);
else
return null;
};
TreeNode parentPageNode = func(target);
}
えっと、そこでしか使わないような再帰処理をConverter使うと関数内でかけますよと。
ん~なにが言いたいか伝わりにくいな・・・。ちょっとした関数の場合のシグネイチャはConverterで済んじゃうので引数0~1個、戻り値0~1個のような場合はdelegateをいちいち作んなくても事足りると思うので。