回答編集履歴

1

interfaceを使用した方法を追記

2017/08/24 12:29

投稿

neelabo
neelabo

スコア60

test CHANGED
@@ -11,3 +11,87 @@
11
11
  Hoge(instance as ClassB);
12
12
 
13
13
  ```
14
+
15
+ ----
16
+
17
+ **(追記)**
18
+
19
+ 「Hoge()が実装されているインスタンスならそれを実行する」というのであれば、`interface`を使用します。
20
+
21
+ ClassA継承にかかわらず、IHasHogeインターフェイスを実装していればキャストされます。
22
+
23
+
24
+
25
+ ```C#
26
+
27
+ public class TestClassAlgorythmMain : MonoBehaviour {
28
+
29
+ void StartX ()
30
+
31
+ {
32
+
33
+ // アップキャスト
34
+
35
+ ClassA instance = new ClassB();
36
+
37
+
38
+
39
+ Hoge(instance);
40
+
41
+ }
42
+
43
+
44
+
45
+ void Hoge(object instance)
46
+
47
+ {
48
+
49
+ var p = instance as IHasHoge;
50
+
51
+ if (p != null)
52
+
53
+ {
54
+
55
+ p.Hoge();
56
+
57
+ }
58
+
59
+ }
60
+
61
+ }
62
+
63
+
64
+
65
+ public interface IHasHoge
66
+
67
+ {
68
+
69
+ void Hoge();
70
+
71
+ }
72
+
73
+
74
+
75
+ public class ClassA : Object {}
76
+
77
+
78
+
79
+ public class ClassB : ClassA, IHasHoge
80
+
81
+ {
82
+
83
+ public void Hoge()
84
+
85
+ {
86
+
87
+ Debug.Log("hogehogehoge");
88
+
89
+ }
90
+
91
+ }
92
+
93
+
94
+
95
+
96
+
97
+ ```