attributesとは?C# attributesの基本的な使用方法・attributesの種類

- SE
- attributesの使い方を教えてください。
- PM
- attributesの特徴や使い方を紹介します。
この記事でわかること
attributesとは?
C#におけるattributesとは属性とも呼ばれ、クラスに機能を追加出来るものになります。代表的なものにpublicやprivateなどがあり、publicならクラス内外問わず閲覧出来て、privateならクラス外では閲覧出来ないと言った機能を付与させられます。
C#のメリットは、プログラミング言語を拡張したりコンパイラの追加作成をしなくても、クラスやメソッドにデータを追加出来る事です。つまり、attributesを使う事で各コンパイラに指示を出したり利用履歴を確認したりする事が可能です。
C#でattributesを使う場合、クラスやメンバーの前に[]でくくって記述すれば自由に定義する事が出来ます。
attributesの特徴
attributesは、プログラムやアセンブリで定義されたメタデータを追加する事が出来ます。これにより、任意のデータ型を付与してプログラムに情報を追加する事が可能になります。
また、アセンブリやモジュールからクラスやプロパティまでその規模に関わらず複数のattributesを追加する事が出来ます。これにより機能を複雑化させることが可能です。そして、attributesの中に引数を代入させられるので、より多くの情報を詰め込めます。
更に、GetCustomAttributesというメソッドを使ってコードを実行することで(リフレクション機能の使用)、オブジェクトが返されることにより追加したメタデータを確認する事が出来ます。
どういう時にattributesを使うの?
attributesは、C#においてConditionalやObsoleteの様にコンパイルに指示を出したり、AssemblyTitleなどの様にメタデータをプログラムに付与したりする場合に使われます。その他にも、リフレクション機能を利用して、紐づけしたデータを確認する時にも使えます。
C# attributesの基本的な使用方法
実際に「conditional」というattributesを使って使用例を見ていきましょう。conditionalとは、指定した条件のみだけで実行される様に定義するattributesです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
using System;
using System.Diagnostics;
class AttributeTest
{
static void Main()
{
double[] array = new double[] { 9, 4, 5, 2, 7, 1, 6, 3, 8 };
BubbleSort(array);
Output(array);
}
///
/// バブルソートを行う。
///
|
static void BubbleSort(double[] array) { int n = array.Length – 1; for (int i = 0; i < n; ++i) { for (int j = n; j > i; –j) if (array[j – 1] > array[j]) Swap(ref array[j – 1], ref array[j]); IntermediateOutput(array); // ソートの途中段階のデータを表示。 } } static void Swap(ref double x, ref double y) { double tmp = x; x = y; y = tmp; } ///
1
2
3
|
/// 配列の内容をコンソールに表示する。
///
|
static void Output(double[] array) { foreach (double x in array) { Console.Write(“{0} “, x); } Console.Write(“\n”); } ///
1
2
3
4
|
/// SHOW_INTERMEDIATE というシンボルが定義されているときのみ
/// 配列の内容をコンソールに表示する。
///
|
[Conditional(“SHOW_INTERMEDIATE”)] static void IntermediateOutput(double[] array) { Output(array); } }
1
|
|
Conditionalの隣に属性パラメーターである”SHOW_INTERMEDIATE”が()でくくられ、その次の行でクラスの定義が行われています。
attributesの種類
上記で紹介したconditional以外にも、C#には標準ライブラリに定義されているattributesが数多くあります。そこで今回はC#で使える各々のattributesを役割と共にご紹介していきます。
コンパイルに影響を及ぼすattributes
コンパイルに影響を及ぼすattributesは3種類あります。1つ目のSystem.AttributeUsageAttributeは、クラスを作成して使い道を特徴付ける際に役立ちます。
2つ目のSystem.ObsoleteAttributeは、紐づけされたクラスやメソッドが働いた時にエラーを出す様に出来ます。
3つめのSystem.Diagnostics.ConditionalAttributeは、C# 2.0 Verのみでconditionalの機能を果たします。
Visual Studioで機能するattributes
CategoryAttributeやDefaultValueAttribute、DescriptionAttributeやBrowsableAttributeは、テキストボックスやボタンのプロパティに指定されると、Visual Studio内の値を編集出来る様になります。
実行エンジンで機能するattributes
実行エンジンで機能するattributesにはDllImportAttributeとComImportAttributeとがありますが、どちらも.NET Frameworkで活躍します。
ただし両者にも違いがあり、DLLからメソッドをインポートするのがDllImportAttributeで、DLLからCOMクラスをインポートするのがComImportAttributeです。
ライブラリで機能するattributes
System.Web.Services.WebMethodAttributeは、XML Web Serviceを使ってメソッドを参照する事が出来ます。
また、System.ServiceModel.OperationContractAttribute、System.ServiceModel.ServiceContractAttribute及びSystem.Runtime.Serialization.DataContractAttributeは、WCFのデータを関連付ける事が可能です。
attributesはクラスと共に使うことで値の範囲や指定した条件と一致しているかを調べる事も出来ます。RequiredAttributeはクラス内にデータが入っている事、RangeAttributeは値の範囲、StringLengthAttributeは文字列の最小値などを検証します。
更にはVisual Studioを用いればテストを実行することも可能です。テストを実行する際にTestClassAttributeは主にクラスを、TestMethodAttributeは主にメソッドを認識する働きを持っています。
- SE
- attributesの使い方が分かりました。
- PM
- attributesの特徴など理解を深めて、実際にコードを書いてみましょう。
attributesを使いこなそう
クラスの横にattributesを定義してあげれば簡単に複数の機能やメタデータを追加出来るのがC#のメリットでもあります。
attributesにも様々なタイプが用意されており、コンパイルを操作出来るものからVisual StudioやC#の実行エンジン等があります。とりわけライブラリで使えるattributesは多機能で、テスト実行の際に必要だったり条件と一致するかを判断出来たりします。
簡単に機能を追加出来るのであれば、使わない手はありません。C#を使う際は是非attributesを活用してください。
Search キーワード検索
Popular 人気の記事
-
【VB.NET入門】DataGridViewの使い方まとめ
公開: 更新:
reccomended おすすめ記事
-
【.NETが統合】.NET 5の概要と今後のリリース予定
公開: 更新:
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)