2020年11月23日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 173 count

【入門級】属性を自作する

Written By: 川俣 晶連絡先

 属性は自作できるのでしょうか。

 できます。

 簡単です。

 基本的に以下の2つのルールを守るクラスを書くだけです。

  • Attibuteクラスを継承する
  • 名前がAttibuteで終わる

 面倒くさいのは属性を利用する方です。

 基本的に属性はリフレクションのAPIを経由して使います。

 サンプルソースでは、あるクラスに属する全てのプロパティを列挙して、属性の有無を判定しています。

 プロパティの一覧を得るには、型オブジェクトにGetPropertiesメソッドを使います。そこから、GetCustomAttributeメソッドで指定の型の属性を取得します。たいていはnullかどうか調べて有無を調べるだけで済みます。

 もっと複雑な使い方は利用例が多くないので、必要になってから調べても十分でしょう。

罠の数々 §

  • 属性を利用する時の書き方は[My]と[MyAttribute]の2つがある。Attributeは省略してもしなくても良い

参考リンク §

Attribute クラス

System.Reflection 名前空間

CustomAttributeExtensions.GetCustomAttribute メソッド

Type.GetProperties メソッド

 この例はプロパティの属性を調べたが上記のリンクからメソッドの属性やクラスの属性を調べる方法を探してみよう。

リポジトリ §

https://github.com/autumn009/cshowto

MyAttribute §

using System;

using System.Reflection;

class MyAttribute : Attribute

{

}

class Program

{

    public int MyProperty1 { get; set; }

    [My]

    public int MyProperty2 { get; set; }

    static void Main()

    {

        foreach (var item in typeof(Program).GetProperties())

        {

            Console.WriteLine($"{item.Name}は{nameof(MyAttribute)}属性を");

            if (item.GetCustomAttribute(typeof(MyAttribute)) == null)

                Console.WriteLine("持っていません。");

            else

                Console.WriteLine("持っています。");

        }

    }

}

実行結果

MyProperty1はMyAttribute属性を

持っていません。

MyProperty2はMyAttribute属性を

持っています。

Facebook

COOL C# CREW

キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
11月
24日
【入門級】継承関係にないクラスの同名メソッドを同じように呼び出す
3days 147 count
total 147 count
【C# コーディング How To】の前のコンテンツ
2020年
11月
21日
【入門級】例外を自作する
3days 48 count
total 211 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20201123090233
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.34 (Alpha-Test) Copyright (c) 2004-2018 Pie Dey.Co.,Ltd.