teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

interfaceを使用した方法を追記

2017/08/24 12:29

投稿

neelabo
neelabo

スコア60

answer CHANGED
@@ -4,4 +4,46 @@
4
4
  ```C#
5
5
  ClassA instance = new ClassB();
6
6
  Hoge(instance as ClassB);
7
+ ```
8
+ ----
9
+ **(追記)**
10
+ 「Hoge()が実装されているインスタンスならそれを実行する」というのであれば、`interface`を使用します。
11
+ ClassA継承にかかわらず、IHasHogeインターフェイスを実装していればキャストされます。
12
+
13
+ ```C#
14
+ public class TestClassAlgorythmMain : MonoBehaviour {
15
+ void StartX ()
16
+ {
17
+ // アップキャスト
18
+ ClassA instance = new ClassB();
19
+
20
+ Hoge(instance);
21
+ }
22
+
23
+ void Hoge(object instance)
24
+ {
25
+ var p = instance as IHasHoge;
26
+ if (p != null)
27
+ {
28
+ p.Hoge();
29
+ }
30
+ }
31
+ }
32
+
33
+ public interface IHasHoge
34
+ {
35
+ void Hoge();
36
+ }
37
+
38
+ public class ClassA : Object {}
39
+
40
+ public class ClassB : ClassA, IHasHoge
41
+ {
42
+ public void Hoge()
43
+ {
44
+ Debug.Log("hogehogehoge");
45
+ }
46
+ }
47
+
48
+
7
49
  ```