派生クラスの具体的な型で置き換えられるように、PakFileFormatクラス内にジェネリックフィールドを宣言したいと思います。抽象クラス内でジェネリッククラスフィールドを宣言する方法
これは、罰金になります:
public class Pak10File : PakFileFormat
{
public Pak10File()
{
this.toc = new PakFileToc<Pak10FileEntry>();
}
}
この問題を解決する方法は?おかげさまで あなたはまた、そのコンパイルを行うために、一般的なPakFileFormat
を作成する必要があります
関連クラス
public abstract class PakFileEntry { }
public class Pak10FileEntry : PakFileEntry
{
public long size; // 8 bytes
public long csize; // 8 bytes
public long offset; // 8 bytes
public byte fname_len; // 1 byte
public char[] fname; // variable
}
public class PakFileToc<T> where T : PakFileEntry { }
public abstract class PakFileFormat
{
protected PakFileToc<T>; // ----- This does not compile.
}
'保護PakFileTocを SomeActualFieldName;' –
か、その 'toc'フィールドことになっていますか? 'PakFileToc'への型パラメータについて気にしない、参照の意味での "汎用"フィールドを宣言したいと言っていますか?あなたはそれをすることはできません。これはC#のジェネリックではありません。コンパイル時に型パラメータを指定する必要があります。ジェネリックでない基底クラスを 'PakFileToc'に宣言して、そのクラスへの参照を使用することができます。可能であれば、実際のパラメーター化されたジェネリック型にキャストする必要がないように記述することをお勧めします。 –
@EdPlunkettあなたはまったく正しいとは思いません。ジェネリックを使用する場合は、リストなどをIDEリストに表示し、宣言時に文字列タイプを指定します。私はこれを達成しようとしています。特に、PakFileTocには、PakFileEntry子を含むように制限します。 –
ppk