ジェネリックに問題があります。アニメーションと呼ばれる基本クラスがあります。異なるタイプのアニメーション(例えば、倍精度、ベクトルなど)から派生し、すべてのアニメーションを処理するために静的クラスを使用して基本的にすべてのアニメーションを管理します。リスト内のすべてのタイプのジェネリックタイプを許可する
public class Animation<T>
{
public virtual Action<T> UpdateAction { get; set; }
public EasingFunctionBase EasingFunction { get; set; }
private TimeSpan _Duration = TimeSpan.FromMilliseconds(0);
public TimeSpan Duration { get; set; }
public T currentValue { get; internal set; }
internal TimeSpan CurrentTime = TimeSpan.FromMilliseconds(0);
internal double Percentage = 0;
internal bool HasFinished = false;
internal virtual void Update()
{
UpdateAction?.Invoke(CurrentValue);
}
public virtual void BeginAnimation()
{
if (Duration.TotalMilliseconds <= 0)
throw new InvalidOperationException("You need a duration greater than 0 seconds.");
AnimationFactory.BeginAnimation(this);
}
}
DoubleAnimation : Animation<double>
{
*do some calculations and set currentValue*
}
public static class AnimationFactory
{
private static List<Animation> _CurrentAnimations = new List<Animation>();
public static void BeginAnimation<T>(Animation<T> animation)
{
// Here is where I'm getting the error. I want this list to be able to contain all types of Animation<T>.
_CurrentAnimations.Add(animation);
_isEnabled = true;
}
void Update()
{
for(int i = 0; i < _CurrentAnimations.Count; i++)
{
_CurrentAnimations[i].update();
}
}
}
ご覧のとおり、新しく作成され、実行されるアニメーションをリストに追加するときにエラーが発生します。このリストをどのように受け入れることができますかすべてはAnimation<T>
ですか?それとも、私はこの間違っているつもりですか?キャストを取り除くためにジェネリック型を追加しましたが(構造化されたアニメーション化の場合)、スマートな解決策があるかもしれません。
あなたは 'Animation'クラスのコードを提供できますか? – dotnetom
@dotnetomちょっと! – Tokfrans
'Animation'ではなく、 'Animation'クラスがありますか? –
dotnetom