私は、ライブラリを書いていますし、私はインターフェイス抽象クラスのない実装のインターフェイスですか?
public interface ISkeleton
{
IEnumerable<IBone> Bones { get; }
void Attach(IBone bone);
void Detach(IBone bone);
}
(アタッチを持つようにしたい)とデタッチ()の実装は、実際には、すべてのISkeletonで同じである必要があります。したがって、それは本質的に可能性があります:
public abstract class Skeleton
{
public IEnumerable<IBone> Bones { get { return _mBones; } }
public List<IBone> _mBones = new List<IBone>();
public void Attach(IBone bone)
{
bone.Transformation.ToLocal(this);
_mBones.add();
}
public void Detach(IBone bone)
{
bone.Transformation.ToWorld(this);
_mBones.Remove(bone);
}
}
しかし、C#では多重継承ができません。だから、さまざまな問題の中で、ユーザーはスケルトンを実装するたびにスケルトンから継承することを覚えておく必要があります。
私は拡張メソッドにpublic static class Skeleton
{
public static void Attach(this ISkeleton skeleton, IBone bone)
{
bone.Transformation.ToLocal(skeleton);
skeleton.Bones.add(bone);
}
public static void Detach(this ISkeleton skeleton, IBone bone)
{
bone.Transformation.ToWorld(this);
skeleton.Bones.Remove(bone);
}
}
を使用することができます。しかし、私はそれが共変ではなく、ユーザーが(アタッチをバイパスすることができますので、私は、したくない
public interface ISkeleton
{
ICollection<IBone> Bones { get; }
}
を持っている必要があります)とデタッチ
()メソッドを使用します。
質問:私は抽象スケルトンクラスを実際に使用する必要がありますか、または何かトリックやメソッドがありますか?
トピック:「SkeletonBase」という名前を付けることをおすすめしますが、それは主観的な判断です。 – abatishchev
なぜそれが 'IEnumerable'である必要がありますか? –
あなたのSceletonの実装が同じであれば、最初になぜインターフェイスが必要か疑問に思っていますか?私は抽象的なSceletonBaseを使うでしょう – Reniuz