C# 如何在抽象类中声明泛型类字段

C# 如何在抽象类中声明泛型类字段,c#,generics,C#,Generics,我想在PakFileFormat类中声明一个泛型字段,以便用派生类中的具体类型替换 这很好: public class Pak10File : PakFileFormat { public Pak10File() { this.toc = new PakFileToc<Pak10FileEntry>(); } } 公共类Pak10File:PakFileFormat { 公共Pak10File() { this.toc=new PakFil

我想在PakFileFormat类中声明一个泛型字段,以便用派生类中的具体类型替换

这很好:

public class Pak10File : PakFileFormat
{

    public Pak10File()
    {
        this.toc = new PakFileToc<Pak10FileEntry>();
    }
}
公共类Pak10File:PakFileFormat
{
公共Pak10File()
{
this.toc=new PakFileToc();
}
}
如何解决这个问题? 谢谢

相关类

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.
}
公共抽象类PakFileEntry{}
公共类Pak10FileEntry:PakFileEntry
{
公共长大小;//8字节
公共长csize;//8字节
公共长偏移量;//8字节
公共字节fname\u len;//1字节
public char[]fname;//变量
}  
公共类PakFileToc,其中T:PakFileEntry{}
公共抽象类PakFileFormat
{       
受保护的PakFileToc;//----这不会编译。
}

您还需要将
PakFileFormat
设置为通用,以便进行编译

但是,为了使其有用,您可能需要使
PakFileFormat
实现某种非通用接口

如果不确切知道实际需要做什么,或者如何使用它,就很难给出比这更详细的信息

public abstract class PakFileFormat<TPakFile> where TPakFile : PakFileEntry 
{       
    protected PakFileToc<TPakFile> toc;
}
公共抽象类PakFileFormat,其中TPakFile:PakFileEntry
{       
受保护的文件目录;
}
子类将看起来像:

public class Pak10File : PakFileFormat<Pak10FileEntry>
{    
    public Pak10File()
    {
        this.toc = new PakFileToc<Pak10FileEntry>();
    }
}
公共类Pak10File:PakFileFormat
{    
公共Pak10File()
{
this.toc=new PakFileToc();
}
}

受保护的PakFileToc SomeActualFieldName还是应该是
toc
字段?您是说要声明引用意义上的“泛型”字段,而不关心
PakFileToc
的类型参数吗?你不能那样做。这不是C#泛型。类型参数必须在编译时提供。您可以将非泛型基类声明为
PakFileToc
,并使用对该基类的引用。如果可能的话,我建议您编写它,这样您就不需要为了使用它而将它强制转换为实际的参数化泛型类型。@EdPlunkett我认为您根本不对。当您使用泛型时,例如在IDE列表中看到的列表,并在声明中指定字符串类型。我正在努力做到这一点。特别限制PakFileToc仅包含PakFileEntry子项。@ppk,因此如果您不喜欢答案,即使答案正确,回答者也一定是错的?@Sefe否。可能误解了我的意思。我真的很感谢你的帮助。谢谢!这就是我所尝试的。最丑,但解决了问题。其想法是编写一个类来处理不同的文件格式。这就是为什么PakFileFormat和PakFileEntry是抽象的。只是一个空容器。而真正的实现是在特定的类中。