using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Reflection;
namespace Common.CloneObjBase
{
/// <summary>
/// BaseObject類是一個用來繼承的抽象類。
/// 每一個由此類繼承而來的類將自動支持克隆方法。
/// 該類實現了Icloneable接口,並且每個從該對象繼承而來的對象都將同樣地
/// 支持Icloneable接口。
/// </summary>
public abstract class CloneObj : ICloneable
{
/// <summary>
/// Author:Evan Lee
/// QQ:278631309
/// Blog:http://hi.baidu.com/genet
/// Email:Cant be Find
/// </summary>
/// <typeparam name="T">要返回的克隆對象;該對象須為class</typeparam>
/// <param name="Tobj">要進行克隆的對象實例</param>
/// <returns></returns>
public T Clone<T>(T Tobj) where T : class
{
//首先我們建立指定類型的一個實例
object newObject = Activator.CreateInstance(typeof(T));
//我們取得新的類型實例的字段數組。
FieldInfo[] fields = newObject.GetType().GetFields();
int i = 0;
foreach (FieldInfo fi in typeof(T).GetFields())
{
//我們判斷字段是否支持ICloneable接口。
Type ICloneType = fi.FieldType.GetInterface("ICloneable", true);