Mercurial > hg > Database > Christie-sharp
view datagear/dg/DataGear.cs @ 34:1236da135f79
update
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 27 Apr 2021 22:57:14 +0900 |
parents | 96fc5e71274e |
children | 090be804eaa9 |
line wrap: on
line source
using System; namespace Christie_net.datagear.dg { public class DataGear<T> { 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; } } }