일부 컨텍스트에서는 이전 질문의 확장입니다. 나는 일반적인 기본 클래스 "장면"가 목록 만들기 <genericBaseClass <T>> 여러 목록 <derivedClass >
어쨌든override List<baseClass> with List<derivedClass>
는
public class Scene<T> where T: SceneModel { }
나는이 상속 두 개의 클래스가 있습니다
public class WorldScene : Scene<WorldModel> { }
public class BattleScene : Scene<BattleModel> { }
이제 어떻게 내가해야 할 일은 List<Scene<SceneModel>>
에 mi WorldScene 및 BattleScene의 xture. 목록이 필요한 곳에서는 WorldScene과 BattleScene에 공통적 인 속성/메서드 만 사용하면됩니다.
나는 그것들이 두 개의 뚜렷이 다른 대상이라는 것을 알았지 만, 그들은 똑같은 것을 상속 받았다. 수동으로 어떤 유형의 제 3 유형으로 캐스팅하지 않고 이런 식으로 그룹화하는 영리한 방법이 있기를 바란다.
public interface IScene<out T> where T : SceneModel { }
// use of T is limited to return values and out parameters
public class Scene<T> : IScene<T> where T : SceneModel { }
List<IScene<SceneModel>> list = new List<IScene<SceneModel>>();
list.Add(new WorldScene());
list.Add(new BattleScene());
foreach (IScene<SceneModel> scene in list) ...
하지 않으면, 당신은 비를 사용할 수 있습니다 장면 <T>의 메서드와 속성이 그것을 허용하는 경우
등의 목록을 선언 : 당신이 사용하는 데 필요한 기능을 선언 - 또는 인터페이스 -
나는 기본 클래스를 소개합니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –
battlescene과 worlscene 모두의 상위 클래스 목록을 만들 수 없습니까? 부모는 일반적인 메소드를 포함합니다. battelscene과 worldscene은 모두 부모이기 때문에 목록에 저장하고 일반적인 방법을 호출 할 수 있습니다. –