辞書をラップして操作を実行するクラスがあります。私はそれを次のようにインスタンス化しようとしています:
class DescriptorList<K, Descriptor>
{
<some code>
}
Descriptor
は私が実装したクラスですが、何らかの理由でコンパイラはそれを認識せず、一般的なキーワード (「T」など) と見なします。コンパイラに自分の型を認識させるにはどうすればよいですか。
キーをラッピング型でジェネリックにするだけの場合は、値のクラス宣言に型記述子は必要ありません。ラップする Dictionary インスタンスを宣言するときは、値の型 (記述子) のみを指定する必要があります。例えば:
class DescriptorList<K>
{
private Dictionary<K, Descriptor> wrapped = new Dictionary<K, Descriptor>() ;
...
}
値の型が固定され、キーの型が異なる辞書が必要な場合は、このようにクラスを実装できます。
class Descriptor
{}
class DescriptorList<K> : Dictionary<K, Descriptor>
{
<some code>
}
または、キーの固定タイプと値のタイプが異なる辞書が必要な場合は、これを使用できます。
class Descriptor
{}
class DescriptorList<K> : Dictionary<Descriptor, K>
{
<some code>
}
辞書をラップします
class DescriptorList<K>
{
private readonly Dictionary<K, Descriptor> wrappedDictionary;
// <some code>
}
あなたがしようとしていることは、現在の実装では不可能です。次のことを行うことができます (ただし、これは単なる回避策であり、何を達成しようとしているかによって異なります)。
public class DescriptorList<K, V> where V : Descriptor
{
}
構文的には、ここDescriptor
ではT
. ジェネリックの一部にしたくない場合は、次を使用してください。
class DescriptiorList<K> { ... }