この投稿の問題と同様の問題があります。
また、特定の基本クラスを拡張するジェネリック クラスを、基本クラスの型のコレクションに入れることができるという何千もの投稿もオンラインで見てきました。私はこれを完全によく理解しています。
私の問題は、上記のリンクされた投稿や他の投稿とは、1 つの基本的な点で異なります。私のジェネリック クラスには、ジェネリックでもある基本クラスがあります。さらに悪いことに、これは非常に大規模な MVVM アプリケーション フレームワーク (社内で構築) の一部であり、一般的な基本クラスにも基本クラスなどがあります。各基本クラスは特定のプロパティと機能を追加し、このように見えます。 :
DataListEntry<T> <-- BaseSynchronisableDataType<T> <-- BaseAuditDataType <-- BaseDataType <-- BaseAnimatableDataType
アプリケーション コレクション クラスは、同様の継承を使用します。
DataList<T> <-- BaseSynchronisableCollection<T> <-- BaseAnimatableCollection<T> <-- BaseCollection<T> <-- SortableObservableCollection<T>
さらに悪いことに、各ジェネリック宣言には制約があるため、たとえば BaseSynchronisableDataType<T> の定義は次のようになります。
public abstract class BaseSynchronisableDataType<T> : BaseAuditDataType,
ISynchronisable<T>, ICloneable<T>, IEquatable<T> where T : class, ICloneable<T>,
IEquatable<T>, new()
したがって、各ジェネリック コレクション型は、これらの制約を通じてジェネリック基本クラスに結び付けられます。うまくいけば、私の問題の規模がわかります。
インターフェイス (上には表示されていません) を使用して、コレクションからそれぞれの基本クラスへのリンクを削除しようとしましたが、関連するクラスの一般的な制約のためにこれも失敗しています。たとえば、一部の基本クラスには必要な一般的な「クラス」制約があり、コレクションの型は「非抽象型でなければならない」というエラーが表示されるため、インターフェイスの型のコレクションを作成できませんでした。ジェネリック型またはメソッドでパラメーター 'T' として使用するためのパブリック パラメーターなしコンストラクター。
注意すべき最後のポイントは、私がやろうとしていることを正確に説明しています。
DataList<T> 基本クラスをすべて拡張するさまざまなクラスをコレクションに設定する必要があります。これらのクラスは名前が異なるだけで、プロパティはまったく同じです。それらは次のように宣言されています。
public class Writer : DataListEntry<Writer>
public class Artist : DataListEntry<Artist>etc.
何かアイデアがあれば教えてください... 私はすでにこの問題で 2 日間苦しんでいますが、上司はあまり満足していません! よろしくお願いします、シェリダン。