using System; using System.Collections.Generic; class AnimationTrack where T : struct { public void Start() { Console.WriteLine("start:" + typeof(T)); } } interface IAnimationTrack { void Start(); } class AnimationTrackAdapter : IAnimationTrack where T : struct { public AnimationTrack Track; public AnimationTrackAdapter(AnimationTrack t) { Track = t; } public void Start() { Track.Start(); } } class AnimationClip { List tracks = new List(); public void Add(IAnimationTrack t) { tracks.Add(t); } public void Start() { foreach (IAnimationTrack t in tracks) { t.Start(); } } } class Program { public static AnimationTrackAdapter Wrap(AnimationTrack t) where T : struct { return new AnimationTrackAdapter(t); } static void Main(string[] args) { AnimationClip c = new AnimationClip(); c.Add(Wrap(new AnimationTrack())); c.Add(Wrap(new AnimationTrack())); c.Start(); } }