Mercurial > hg > Database > Christie-sharp
annotate 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 |
rev | line source |
---|---|
1
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 using System; |
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 |
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 namespace Christie_net.datagear.dg { |
8 | 4 public class DataGear<T> { |
5 protected T data; | |
9
ce6906edcbf4
fix DataGear<Type> to DataGear<object>
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
8
diff
changeset
|
6 protected Type clazz = null; |
8 | 7 |
8 public DataGear(T data) { | |
9 SetClazz(data.GetType()); | |
10 SetData(data); | |
11 } | |
1
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 |
8 | 13 public DataGear(Type clazz) { |
14 SetClazz(clazz); | |
15 } | |
16 | |
17 public void SetData(T data) { | |
30 | 18 //Console.WriteLine("data ****" + data.GetType() + " clazz;" + clazz); |
8 | 19 var dataClazz = data.GetType(); |
20 if (dataClazz == clazz) { | |
21 this.data = data; | |
22 return; | |
1
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 } |
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 |
8 | 25 var dataSuperClazz = dataClazz.BaseType; |
26 while (dataSuperClazz != null) { | |
27 if (dataClazz == clazz) { | |
1
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 this.data = data; |
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 return; |
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 } |
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 |
8 | 32 dataSuperClazz = dataSuperClazz.BaseType; |
1
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 } |
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 |
8 | 35 var interfaces = dataClazz.GetInterfaces(); |
36 foreach (var interfaze in interfaces) | |
37 if (interfaze == clazz) { | |
38 this.data = data; | |
39 return; | |
40 } | |
3
f27db91a852e
update MessagePackDagaGear.cs
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
41 |
30 | 42 throw new InvalidCastException("datagear cannot set class from " + dataClazz.GetType().Name + " to " + |
8 | 43 data.GetType().Name); |
44 } | |
3
f27db91a852e
update MessagePackDagaGear.cs
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
45 |
8 | 46 public void SetClazz(Type clazz) { |
47 this.clazz = clazz; | |
48 } | |
49 | |
50 public Type GetClazz() { | |
51 return clazz; | |
52 } | |
3
f27db91a852e
update MessagePackDagaGear.cs
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
53 |
34 | 54 public virtual T GetData() { |
8 | 55 return data; |
1
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 } |
8 | 57 |
58 public override string ToString() { | |
59 return "DataGear : classname " + clazz; | |
60 } | |
61 } | |
1
740b80680d75
add Codegear and Datagear files
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 } |