現在Unityでゲームを作りつつC#を勉強しているのですが、ジェネリッククラスの基底クラスとしての扱いかたに困っています。
lang
1// クラス定義 2public class Base<T> : MonoBehaviour where T : Base<T> { 3 public static T CreateInstance() { 4 GameObject obj = new GameObject(); 5 T component = obj.AddComponent<T>(); // Tクラスの実体を生成する 6 return component; 7 } 8} 9 10public class A : Base<A> { 11 // Aクラスの定義 12} 13 14public class B : Base<B> { 15 // Bクラスの定義 16}
MonoBehaviourというUnityのクラスを継承するとnew()ができなくなるため、別途実体を生成するためのメソッドを定義する必要があります。
そのメソッドを派生クラスから呼び出した際に型を指定せずに済むようジェネリッククラスを使用しているのですが、下記のような指定をするとエラーになってしまいます。
lang
1// Base<T>を型指定してListに格納する 2List<Base<T>> bases = new List<Base<T>> { 3 A.CreateInstance(), 4 B.CreateInstance() 5}; 6// ジェネリックメソッドのwhereにBase<T>を指定する 7void func<Type>() where Type : Base<T> { 8}
特別ジェネリッククラスを使わなければいけないわけではないので、他に解決する方法がないかご教授いただけると幸いです。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/02 05:08