ホームページ  >  記事  >  バックエンド開発  >  C# リフレクションと機能チェックの詳細な紹介

C# リフレクションと機能チェックの詳細な紹介

黄舟
黄舟オリジナル
2017-03-04 11:09:111696ブラウズ

反射とプロパティ

.net Framework によって提供されるリフレクションおよび機能テクノロジを使用して、データの再現性をチェックし、特定のデータをデータベース テーブルに書き込むかどうかを決定できます。

要件

エンティティがデータベースにデータを書き込むとき、たとえば、ID 番号が重複できないことを前提として、新しく作成された個人の場合、データが重複しているかどうかを確認する必要があることがよくあります。 、この時点で新しく作成された個人の ID。この番号が人事テーブルの 1 つ以上のエントリと重複している場合は、プロンプトを表示するか、更新または削除などの他の措置を講じる必要があります。

方法

この需要シナリオでは、.net Framework が提供する機能とリフレクション テクノロジを使用して、そのようなニーズを解決できます。具体的なプロセスは、

次に、エンティティ クラスで書き込んだばかりの属性クラスを参照して、その一意の識別子 (1 つ以上の属性の組み合わせ) を構築します

最後に、データの再現性をチェックするときに、Attribute によって提供されるメソッドを使用します。各エンティティ クラスの一意の識別属性を取得します。

Attribute[] GetCustomAttributes(modeltype, inherit);

KeyFieldAttribute属性クラス

     public class KeyFieldAttribute:Attribute
     {        private static List<string> keyfields = new List<string>();        
     /// <summary>
        /// 构造关键属性
        /// </summary>
        /// <param name="fields"></param>
        public KeyFieldAttribute(params string[] fields)
        {            foreach (string kf in fields)
            {                if (!keyfields.Contains(kf))
                    keyfields.Add(kf);
            }

        }        public static List<string> KeyFields
        {            get { return keyfields; }
        }
    }

EntityクラスModel

[KeyField("ID")]public class Person
{  public int ID {get;set;} //人员ID
  public string Name {get;set;}//人员名称
  public DateTime BirthDate {get;set;} //出生年月日}

    [KeyField("RoleGroupID","RoleCode")]    public class Role
    {        public int RoleGroupID { get; set; } //角色组别ID
        public string RoleCode { get; set; } //角色编号
        public string RoleName { get; set; }//角色名称
    }

ここで、KeyFieldAttributeの接尾辞Attributeは省略できるので、KeyFieldはKeyFiに相当する略語です。フィールド属性。

機能クラスを使用します:

            KeyFieldAttribute.GetCustomAttributes(typeof(Person), true);
            List<string> fields = KeyFieldAttribute.KeyFields; //获取到Person实体的唯一标识属性ID

            KeyFieldAttribute.GetCustomAttributes(typeof(Role), true);            
            var fields = KeyFieldAttribute.KeyFields;//Role实体唯一属性,2个属性组合:RoleGroupID,RoleCode

機能によって返されたキー属性の組み合わせを使用して、データベース内のデータをクエリします。少なくとも 1 つのレコードが見つかった場合は、特定のロジックに従って処理されます。見つからない場合は、新しいデータが処理されます。直接書かれること。 Attribute クラスで提供されるメソッドの説明:

/// <summary>/// 检索应用于类型的成员的自定义特性的数组。
/// </summary>/// <param name="modeltype">要搜索的自定义特性的类型</param>
///<param name="inherit">是否搜索成员的祖先</param>
/// <returns>自定义特性的数组</returns>Attribute[] GetCustomAttributes(modeltype, inherit);

上記は、C# リフレクションと機能重複チェックの詳細な紹介です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。