attributesとは?C# attributesの基本的な使用方法・attributesの種類
- システム
エンジニア - attributesの使い方を教えてください。
- プロジェクト
マネージャー - 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は主にメソッドを認識する働きを持っています。
- システム
エンジニア - attributesの使い方が分かりました。
- プロジェクト
マネージャー - attributesの特徴など理解を深めて、実際にコードを書いてみましょう。
attributesを使いこなそう
クラスの横にattributesを定義してあげれば簡単に複数の機能やメタデータを追加出来るのがC#のメリットでもあります。
attributesにも様々なタイプが用意されており、コンパイルを操作出来るものからVisual StudioやC#の実行エンジン等があります。とりわけライブラリで使えるattributesは多機能で、テスト実行の際に必要だったり条件と一致するかを判断出来たりします。
簡単に機能を追加出来るのであれば、使わない手はありません。C#を使う際は是非attributesを活用してください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)