通过反射设置逻辑类的值 - BaseItem

2017-02-20 15:57:21  访问(1382) 赞(0) 踩(0)

  • using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;
    using System.Data;
    
    namespace SlowX.Class
    {
        /// <summary>
        /// 类实体
        /// </summary>
        [Serializable]
        public class BaseItem
            :
            IBaseItem
        {
            /// <summary>
            /// 反射默认的BindingFlags参数 BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic
            /// </summary>
            public const BindingFlags BindingFlagsDefault = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
    
            ///// <summary>
            ///// 反射默认的BindingFlags参数 BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
            ///// </summary>
            //public const BindingFlags BindingFlagsStaticDefault = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
    
            ///// <summary>
            ///// BindingFlags.Static | BindingFlags.Public 
            ///// </summary>
            //public const BindingFlags BindingFlagsStaticPublic = BindingFlags.Static | BindingFlags.Public;
    
    
            /// <summary>
            /// 是否包含 PropertyInfo Name
            /// </summary>
            /// <param name="strName"></param>
            /// <returns></returns>
            public bool ContainsPropertyInfoName(string strName)
            {
                if (strName == null || strName.Length == 0)
                    return false;
    
                Type t = this.GetType();
    
                PropertyInfo info = t.GetProperty(strName, BindingFlagsDefault);
    
                return (info != null);
            }
    
    
            /// <summary>
            /// 通过名称获得属性的值
            /// </summary>
            /// <param name="strName"></param>
            /// <returns></returns>
            public object GetPropertyInfoValue(string strName)
            {
                return GetPropertyInfoValue(strName, null);
            }
    
            /// <summary>
            /// 通过名称获得属性的值
            /// </summary>
            /// <param name="strName"></param>
            /// <param name="defaultValue"></param>
            /// <returns></returns>
            public virtual object GetPropertyInfoValue(string strName, object defaultValue)
            {
                if (strName == null || strName.Length == 0)
                {
                    // return false;
                    return defaultValue;
                }
    
                Type t = this.GetType();
    
                PropertyInfo info = t.GetProperty(strName, BindingFlagsDefault);
    
                if (info == null)
                    return defaultValue;
    
                return info.GetValue(this, null);
            }
    
            /// <summary>
            /// 通过名称获得属性的值
            /// </summary>
            /// <param name="strName"></param>
            /// <returns></returns>
            public string GetPropertyInfoStringValue(string strName)
            {
                return GetPropertyInfoStringValue(strName, null);
            }
    
            /// <summary>
            /// 通过名称获得属性的值
            /// </summary>
            /// <param name="strName"></param>
            /// <param name="defaultValue"></param>
            /// <returns></returns>
            public string GetPropertyInfoStringValue(string strName, string defaultValue)
            {
                object theResult = GetPropertyInfoValue(strName, defaultValue);
    
                if (theResult == null)
                    return null;
    
                return theResult.ToString();
            }
    
    
            /// <summary>
            /// 通过名称获得FieldInfo的值
            /// </summary>
            /// <param name="strName"></param>
            /// <returns></returns>
            protected object GetFieldInfoValue(string strName)
            {
                return GetFieldInfoValue(strName, null);
            }
    
            /// <summary>
            /// 通过名称获得FieldInfo的值
            /// </summary>
            /// <param name="strName"></param>
            /// <param name="objDefault"></param>
            /// <returns></returns>
            protected virtual object GetFieldInfoValue(string strName, object defaultValue)
            {
                if (strName == null || strName.Length == 0)
                {
                    // return false;
                    return defaultValue;
                }
    
                Type t = this.GetType();
    
                FieldInfo info = t.GetField(strName, BindingFlagsDefault);
    
                if (info == null)
                    return defaultValue;
    
                return info.GetValue(this);
            }
    
           
           
            /// <summary>
            /// 设置FieldInfo的值
            /// </summary>
            /// <param name="theName"></param>
            /// <param name="theValue"></param>
            protected void SetFieldInfoValue(string theName, object theValue)
            {
                SetFieldInfoValue(theName, theValue, true);
            }
    
            /// <summary>
            /// 设置FieldInfo的值
            /// </summary>
            /// <param name="theName"></param>
            /// <param name="ignoreCase"></param>
            /// <param name="theValue"></param>
            protected void SetFieldInfoValue(string theName, bool ignoreCase, object theValue)
            {
                SetFieldInfoValue(theName, ignoreCase, theValue, true);
            }
    
            /// <summary>
            /// 设置FieldInfo的值
            /// </summary>
            /// <param name="theName"></param>
            /// <param name="theValue"></param>
            /// <param name="throwOnError"></param>
            protected void SetFieldInfoValue(string theName, object theValue, bool throwOnError)
            {
                SetFieldInfoValue(theName, true, theValue, throwOnError);
            }
    
            /// <summary>
            /// 设置FieldInfo的值
            /// </summary>
            /// <param name="theName"></param>
            /// <param name="ignoreCase"></param>
            /// <param name="theValue"></param>        
            /// <param name="throwOnError"></param>
            protected virtual void SetFieldInfoValue(string theName, bool ignoreCase, object theValue, bool throwOnError)
            {
                // ReflectionFunctions.SetProtectedFieldInfoValue(this, theName, ignoreCase, theValue, throwOnError);
            }
    
            /// <summary>
            /// 变量ID的前缀值m_
            /// </summary>
            public const string varPreId = "m_";
    
            /// <summary>
            /// 
            /// </summary>
            public BaseItem
                (
    
                )
            {
    
            }
    
            /// <summary>
            /// 通过数据行(DataRow或BaseEntity)构造函数
            /// </summary>
            /// <param name="obj"></param>
            public BaseItem
                (
                    object obj
                )
            {
                Init(obj);
            }
    
    
            /// <summary>
            /// 初始化
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public virtual void Init(object obj)
            {
                if (obj == null)
                {
                    throw new Exception
                        (
                            "方法:"
                            + MethodBase.GetCurrentMethod().ReflectedType.FullName
                            + " "
                            + MethodBase.GetCurrentMethod().ToString()
                            + " 发生异常:"
                            + "传入参数:object obj为null。"
                        );
                }
    
                if (obj is DataRow)
                {
                    DataRow dr = obj as DataRow;
    
                    foreach (DataColumn dc in dr.Table.Columns)
                    {
                        SetFieldInfoValue(varPreId + dc.ColumnName, true, dr[dc.ColumnName], false);
                    }
                }
                //else if (obj is BaseItem)
                //{
    
                //}
                //else if (obj is BaseEntity)
                //{
                //    BaseEntity entity = obj as BaseEntity;
    
                //    EntityFieldDictionary ht = entity.htEntityFieldGet();
    
                //    foreach (EntityFieldInfo info in ht.Values)
                //    {
                //        SetFieldInfoValue(varPreId + info.NameOutput, true, info.Value, false);
                //    }
                //}
                else
                {
    
                    throw new Exception
                        (
                            "方法:"
                            + MethodBase.GetCurrentMethod().ReflectedType.FullName
                            + " "
                            + MethodBase.GetCurrentMethod().ToString()
                            + " 发生异常:" + obj.GetType().FullName + "为未知的数据源。"
                        );
                }
    
    
            }
        }
    }
    
    

  • using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;
    using System.Data;
    
    namespace SlowX.Class
    {
        /// <summary>
        /// 类实体
        /// </summary>
        public interface IBaseItem
        {
    
    
            /// <summary>
            /// 是否包含 PropertyInfo Name
            /// </summary>
            /// <param name="strName"></param>
            /// <returns></returns>
            bool ContainsPropertyInfoName(string strName);
    
            /// <summary>
            /// 通过名称获得属性的值
            /// </summary>
            /// <param name="strName"></param>
            /// <returns></returns>
            object GetPropertyInfoValue(string strName);
    
    
            /// <summary>
            /// 通过名称获得属性的值
            /// </summary>
            /// <param name="strName"></param>
            /// <param name="defaultValue"></param>
            /// <returns></returns>
            object GetPropertyInfoValue(string strName, object defaultValue);
    
            /// <summary>
            /// 通过名称获得属性的值
            /// </summary>
            /// <param name="strName"></param>
            /// <returns></returns>
            string GetPropertyInfoStringValue(string strName);
    
            /// <summary>
            /// 通过名称获得属性的值
            /// </summary>
            /// <param name="strName"></param>
            /// <param name="defaultValue"></param>
            /// <returns></returns>
            string GetPropertyInfoStringValue(string strName, string defaultValue);
    
    
            ///// <summary>
            ///// 通过名称获得FieldInfo的值
            ///// </summary>
            ///// <param name="strName"></param>
            ///// <returns></returns>
            //object GetFieldInfoValue(string strName);
    
            ///// <summary>
            ///// 通过名称获得FieldInfo的值
            ///// </summary>
            ///// <param name="strName"></param>
            ///// <param name="objDefault"></param>
            ///// <returns></returns>
            //object GetFieldInfoValue(string strName, object defaultValue);
    
    
    
            ///// <summary>
            ///// 设置FieldInfo的值
            ///// </summary>
            ///// <param name="theName"></param>
            ///// <param name="theValue"></param>
            //void SetFieldInfoValue(string theName, object theValue);
    
            ///// <summary>
            ///// 设置FieldInfo的值
            ///// </summary>
            ///// <param name="theName"></param>
            ///// <param name="ignoreCase"></param>
            ///// <param name="theValue"></param>
            //void SetFieldInfoValue(string theName, bool ignoreCase, object theValue);
    
            ///// <summary>
            ///// 设置FieldInfo的值
            ///// </summary>
            ///// <param name="theName"></param>
            ///// <param name="theValue"></param>
            ///// <param name="throwOnError"></param>
            //void SetFieldInfoValue(string theName, object theValue, bool throwOnError);
    
            ///// <summary>
            ///// 设置FieldInfo的值
            ///// </summary>
            ///// <param name="theName"></param>
            ///// <param name="ignoreCase"></param>
            ///// <param name="theValue"></param>        
            ///// <param name="throwOnError"></param>
            //void SetFieldInfoValue(string theName, bool ignoreCase, object theValue, bool throwOnError);
    
    
            /// <summary>
            /// 初始化
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            void Init(object obj);
        }
    }
    
    

标签:通过反射设置逻辑类的值 - BaseItem 

上一条:

下一条:


 

相关评论

评论加载中……
 

发表评论

类型:
内容:
  (Alt+Enter)