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

时间:2017-12-12 17:29:15

标签: c# generics

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

这没关系:

public class Pak10File : PakFileFormat
{

    public Pak10File()
    {
        this.toc = new PakFileToc<Pak10FileEntry>();
    }
}

如何解决这个问题? 感谢。

相关课程

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.
}

1 个答案:

答案 0 :(得分:1)

为了进行编译,你还需要使PakFileFormat通用。

为了使其有用,您可能需要使PakFileFormat实现某种非泛型接口。

如果不确切知道您需要PakFileFormat实际做什么,或者如何使用它,很难提供更多细节。

public abstract class PakFileFormat<TPakFile> where TPakFile : PakFileEntry 
{       
    protected PakFileToc<TPakFile> toc;
}

子类看起来像是:

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