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);
}
}