Mercurial > hg > Database > Christie-sharp
view datagear/dg/DataGear.cs @ 8:e6f5b7d14dd1
update DataGears
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 12 Oct 2020 00:49:32 +0900 |
parents | f27db91a852e |
children | ce6906edcbf4 |
line wrap: on
line source
using System; namespace Christie_net.datagear.dg { public class DataGear<T> { protected Type clazz; protected T data; public DataGear(T data) { SetClazz(data.GetType()); SetData(data); } public DataGear(Type clazz) { SetClazz(clazz); } public void SetData(T data) { 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 T GetData() { return data; } public override string ToString() { return "DataGear : classname " + clazz; } } }