- PR -

カスタム属性の利用用途

1
投稿者投稿内容
sou
ベテラン
会議室デビュー日: 2002/09/25
投稿数: 56
投稿日時: 2004-05-27 20:43
最近、カスタム属性とReflectionという物を勉強して、ListViewコントロールにクラスのプロパティを表示するためのカスタム属性(ColumnHeaderAttribute)を作成しました。作成したカスタム属性はListViewコントロールの列ヘッダーコントロール(ColumnHeader)の作成に関する情報(列名、列幅、水平方向の配置方法、列の型など)を定義するために作りました。具体的には以下のようにしてクラスのプロパティに属性を指定しています。

[ColumnHeaderAttribute("ファイル名",250,HorizontalAlignment.Left)]
public string FileName
{
get{return fileName;}
}
[ColumnHeaderAttribute("ファイルサイズ",40,HorizontalAlignment.Right)]
public int Size
{
get{return size;}
}

はじめてカスタム属性やReflectionを使ってすごい便利だな〜と思い、
他にもどんどん利用していきたいなと思っています。
そこでお聞きしたいんですが、皆さんはどのような用途にカスタム属性やReflectionを利用していますか?
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2004-05-28 09:21
クラスのメンバを確認したり修正したりするには、PropertyGridが便利ですよ。
(ツールボックスで「アイテムの追加と削除」が必要です。)

私は、カスタム属性でXlsSerializerというのを作りました。
Excelまたは、CSVファイルの指定箇所から任意のクラスの配列を作成できます。
(XmlSerializerみたいなもの)

使い方例
コード:
class Data
{
   [XlsCol(0)]     public string  name;
   [XlsCol("id")]  public int     i;
}
public static void Test()
{
   XlsSerializer xs = new XlsSerializer(typeof(Data));
   StringReader sr = new StringReader("nam,id\nabc,123\ndef,456\nghi,789");
   object[] a = xs.DeserializeCsv(sr,true);
   foreach (Data d in a) Console.WriteLine("{0} {1}",d.name,d.i);
}



他には、こんなものとか。(バグが放置してあります)
http://plaza.harmonix.ne.jp/~fakira/turedure/cprog_03.htm#030610
1

スキルアップ/キャリアアップ(JOB@IT)