###前提・実現したいこと
Unity 2017.1.0p4 で .NET4.6 を設定すれば利用可能になる dynamic キーワードど同等なことが、Unity 5.5.0f3 周辺の環境でも実現できるようになりたい。
下記エラーの対応によって dynamic が使えるようになればそれでも良いですし、それ以外の方法があれば知りたいです。
(まぁ正直、用意されている内部構造を変えれるとしても当然推奨はされないとは思いますが・・・)
(追記:dynamic を使えるようにする手法はやはり問題がありそうなので候補から外します)
###該当のソースコード
(情報が足らない部分があったので追記しました)
C#
1using UnityEngine; 2 3public class TestClassAlgorithmMain : MonoBehaviour 4{ 5 6 void Start() 7 { 8 // アップキャスト 9 ClassA instance = new ClassC(); 10 11 // (疑問)アップキャストされた変数を、明示的にではなく、何かしらの手法で動的にダウンキャストした上でメソッドに渡したい 12 // 或いは、メソッドに渡った段階で暗黙的にダウンキャストされた状態にしたい 13 // ClassB, ClassC という文字列をこれ以上記述しない方法を模索したい。 14 15 // 失敗例 16 // Hoge((ClassB)instance); // 明示的なので、今回の要件には不適切 17 // Hoge(instance as ClassB); // 同上 18 19 // 条件付き成功例 20 // Hoge((dynamic)instance); // Unity2017.1.0p4 で .NET4.6 を使えるようにすれば動く 21 22 Hoge(instance); // error 23 Moge(instance); // error 24 } 25 26 // 下記の Hoge() と Moge() は変更しない 27 void Hoge(ClassB instance) 28 { 29 instance.Hoge(); 30 } 31 32 void Moge(ClassC instance) 33 { 34 instance.Moge(); 35 } 36} 37 38 39public class ClassA : Object { } 40 41public class ClassB : ClassA 42{ 43 public void Hoge() 44 { 45 Debug.Log("hogehogehoge"); 46 } 47} 48 49public class ClassC : ClassB 50{ 51 public void Moge() 52 { 53 Debug.Log("mogemogemoge"); 54 } 55}
###エラー
後述のソースコードをそのまま書くと下記エラーが出る - Assets/TestClassAlgorythmMain.cs(13,9): error CS1502: The best overloaded method match for `TestClassAlgorythmMain.Hoge(ClassB)' has some invalid arguments - Assets/TestClassAlgorythmMain.cs(13,14): error CS1503: Argument `#1' cannot convert `ClassA' expression to type `ClassB' Unity 5.5.0f3 で(dynamic)を使うと、Unity 上で二つのエラーが出る - Assets/TestClassAlgorythmMain.cs(12,15): error CS1980: Dynamic keyword requires `System.Runtime.CompilerServices.DynamicAttribute' to be defined. Are you missing System.Core.dll assembly reference? - Assets/TestClassAlgorythmMain.cs(12,9): error CS1969: Dynamic operation cannot be compiled without `Microsoft.CSharp.dll' assembly reference
###試したこと
リフレクション関連を使えば何か出来るかと思ったが、そもそも C# 初心者レベルなので作法が良く分からなかった。
###補足情報(言語/FW/ツール等のバージョンなど)
Unity2017.1.0p4, Unity 5.5.0f3
共に C#