.net column
.NET開発者のためのブログメディア

社内サーバー

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

2021年07月27日

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です。

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; } ///

static void Output(double[] array) { foreach (double x in array) { Console.Write(“{0} “, x); } Console.Write(“\n”); } ///

[Conditional(“SHOW_INTERMEDIATE”)] static void IntermediateOutput(double[] array) { Output(array); } }

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を活用してください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags