bucket-sort logo bucket-sort

プログラミングとインフラエンジニアリングの覚え書き

  • Posts
  • About
  • Contact
  1. Home
  2. All Posts
  3. [C#] AttributeとReflectionの使いどころ

[C#] AttributeとReflectionの使いどころ

Mar 24, 2026 C# , .NET bucket-sort

ここまでで、

  • Attribute = メタ情報
  • Reflection = それを読む仕組み

という関係が整理できました。

では実際のアプリ開発では、これらはどのように使われるのでしょうか。

基本パターン

すべての応用は、次の流れに集約されます。

基本フロー

  1. Attributeを定義する
  2. コードに付ける
  3. Reflectionで読む
  4. 振る舞いを変える

宣言 → 解釈 → 実行

例①:特定メソッドの自動実行

[MyTest]
public void Test1() {}

Reflectionで:

if (method.IsDefined(typeof(MyTestAttribute), false))
{
    method.Invoke(obj, null);
}

⇒ テストフレームワークの基本形

例②:メタ情報の管理(UI表示)

[DisplayName("ユーザー名")]
public string Name { get; set; }

⇒ UI表示用のラベルをコードから分離できる

例③:動作制御(権限)

[RequiresAdmin]
public void DeleteUser() {}
if (!IsAdmin()) throw;

⇒ 認可ロジック

実務での典型パターン

マッピング

  • JSON
  • DB

ルーティング

  • [Route("/users")]

バリデーション

  • [Required]

DI

  • [Inject]

⇒ すべて「Attribute + Reflection」

設計の本質

ここが最も重要です。

宣言と処理の分離

  • Attribute → 宣言(設定)
  • コード → 処理

⇒ ロジックが分離される

可読性と拡張性

  • 設定がコードに埋め込まれる
  • 後から振る舞いを変えやすい

注意点

使いすぎると見えにくい

  • どこで何が起きているか分かりにくい

パフォーマンス

  • 起動時にまとめて処理するのが基本

まとめ

AttributeとReflectionは、単なる便利機能ではなく、 宣言的に振る舞いを制御するための仕組み です。

本質

  • Attribute → 情報
  • Reflection → 解釈
  • 実行 → 振る舞い変更

「コードに意味を持たせ、それを実行時に解釈する」

この考え方は、

  • ASP.NET
  • ORM
  • シリアライザ

など、現代の多くのフレームワークの基盤になっています。

C# .NET
← [C#] Reflectionとは(機能と役割) [C#] HashSet<T>の使い方 →

Related Posts

  • [C#] delegate と event の仕組みを整理する Apr 1, 2026
  • Pub/Sub パターンとは何か Mar 31, 2026
  • [C#] Interlockedの使い方 Mar 27, 2026
  • [C#] ImmutableHashSet<T>の使い方 Mar 26, 2026

Table of Contents

  • 基本パターン
    • 基本フロー
  • 例①:特定メソッドの自動実行
  • 例②:メタ情報の管理(UI表示)
  • 例③:動作制御(権限)
  • 実務での典型パターン
    • マッピング
    • ルーティング
    • バリデーション
    • DI
  • 設計の本質
    • 宣言と処理の分離
    • 可読性と拡張性
  • 注意点
    • 使いすぎると見えにくい
    • パフォーマンス
  • まとめ
    • 本質

Recent Posts

  • Laravel の Event / Listener で Pub/Sub を実装する Apr 2, 2026
  • [C#] delegate と event の仕組みを整理する Apr 1, 2026
  • Pub/Sub パターンとは何か Mar 31, 2026
  • PHP/Laravel で値の状態を判定するヘルパ関数まとめ Mar 30, 2026
  • Filament の dehydrated メソッドとは何か Mar 29, 2026

Categories

  • AWS27
  • C#22
  • .NET20
  • Laravel16
  • Linux12
  • Apache8
  • MySQL8
  • PHP8
  • DynamoDB6
  • Nginx5
  • WordPress4
  • インフラ4
  • Hugo3
  • セキュリティ3
  • .NET Framework1
  • Aurora1
  • Filament1
  • Git1
  • SQS1

Tags

  • AWS
  • C#
  • .NET
  • Laravel
  • PHP
  • MySQL
  • セキュリティ
  • Linux
  • Apache
  • Code Snippet
  • DynamoDB
  • NoSQL
  • PHP-FPM
  • RDS
  • DoS
  • Nginx
  • Windows
  • WordPress
  • パフォーマンス
  • 監視
  • Amazon Linux 2023
  • CMS
  • Docker
  • Ipset
  • Iptables
  • OPCache
  • Webサーバー
  • 認可
  • Aurora
  • Blade
Powered by Hugo & Explore Theme.