0

良い一日、

コレクションを表すクラスがあります。コレクションには、Type各要素のメタデータオブジェクトのデータ型を指定できるtypeのプロパティがあります。要素がコレクションに追加されるたびに、割り当てられたメタデータオブジェクトの新しいインスタンスがActivator.CreateInstance(Type type)コレクションクラス内から作成されます。

必要なのは、メタデータオブジェクトの型を特定のインターフェイスを実装する型に制限することです。例:

publlic class Collection
{
    public Type MetaDataType;

    // other code
}

public class CollectionImplementation
{
    // some properties

    public CollectionImplementation()
    {
        Collection c = new Collection();

        // valid assignment
        c.MetaDataType = typeof(ValidMetaClass);

        // invalid assignement
        c.MetaDataType = typeof(InvalidMetaClass);
    }

    // some functions
}

public class ValidMetaClass : IMetaInterface
{
    // valid meta class code
}

public class InvalidMetaClass
{
    // invalid meta class code
}

public interface IMetaInterface
{
    // interface code
}

このようなことは可能ですか?

すべての貢献者に事前に感謝します。ありとあらゆるご意見に感謝いたします。

よろしくお願いします、私

4

2 に答える 2

1

CollectionクラスでパブリックフィールドMetaDataTypeを設定する代わりに、コンストラクターでジェネリックスと型制約を使用してみてください。

public CollectionImplementation<T>(T MetaDataType) where T : NameOfInterface
{
}
于 2011-09-01T16:18:42.823 に答える
0

ジェネリック型に制限を使用できます。

public class Collection<T> where T : IMetaInterface
{
T MetaDataType;
}

または、次のような要素を追加するときに例外をスローすることもできます。

if( !( addedElement is IMetaInterface )) throw new Exception("Please don't do this");
于 2011-09-01T16:18:10.420 に答える