using System; namespace Christie_net.datagear.dg { public class DataGear { protected T data; protected Type clazz = null; public DataGear(T data) { SetClazz(data.GetType()); SetData(data); } public DataGear(Type clazz) { SetClazz(clazz); } public void SetData(T data) { //Console.WriteLine("data ****" + data.GetType() + " clazz;" + clazz); var dataClazz = data.GetType(); if (dataClazz == clazz) { this.data = data; return; } var dataSuperClazz = dataClazz.BaseType; while (dataSuperClazz != null) { if (dataClazz == clazz) { this.data = data; return; } dataSuperClazz = dataSuperClazz.BaseType; } var interfaces = dataClazz.GetInterfaces(); foreach (var interfaze in interfaces) if (interfaze == clazz) { this.data = data; return; } throw new InvalidCastException("datagear cannot set class from " + dataClazz.GetType().Name + " to " + data.GetType().Name); } public void SetClazz(Type clazz) { this.clazz = clazz; } public Type GetClazz() { return clazz; } public virtual T GetData() { return data; } public override string ToString() { return "DataGear : classname " + clazz; } } }