view datagear/dg/DataGear.cs @ 42:ce46626dddb1

RemoteDG string send test
author riono <e165729@ie.u-ryukyu.ac.jp>
date Sun, 19 Sep 2021 17:04:08 +0900
parents 0cd765be9693
children 476b6efeca5b
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);
        
        //Console.WriteLine("type:"  + data.GetType());
    }

    public DataGear(Type clazz) {
        SetClazz(clazz);
    }

    public void SetData(T data) {
        // debug
        //Console.WriteLine("data ****" + data.GetType() + "  clazz;" + clazz + ", d:" + data);

        var dataClazz = data.GetType();
        if (dataClazz == clazz) {
            this.data = data;
            return;
        }
        Console.WriteLine("call1");

        var dataSuperClazz = dataClazz.BaseType;
        while (dataSuperClazz != null) {
            if (dataClazz == clazz) {
                this.data = data;
                return;
            }

            dataSuperClazz = dataSuperClazz.BaseType;
        }
        Console.WriteLine("call2");
        
        var interfaces = dataClazz.GetInterfaces();
        foreach (var interfaze in interfaces)
            if (interfaze == clazz) {
                this.data = data;
                return;
            }
        Console.WriteLine("call3");
        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;
    }
}
}