【问题标题】:Generic Class Type Parameters that I dont wanna use?我不想使用的通用类类型参数?
【发布时间】:2014-11-10 16:26:25
【问题描述】:

我想在这里炫耀我的班级宣言:

class ResourceHolder<ResourceT, IdentifierT, ParameterT>

因此,我有两种情况要启动这个课程:

 ResourceHolder<Texture, idTextures, IntRect> mTextureHolder;
 ResourceHolder<SoundBuffer, idSounds> mSoundHolder;

正如您在具有 SoundBuffer 属性的后一个中看到的那样,在任何情况下,在结合类型 SoundBuffer 的类中,我真的不需要第三个参数。

所以我的问题是如何声明泛型类,以便我可以同时使用这两种方式而不会出现编译器错误?如果可能的话,如何重载该类声明?

【问题讨论】:

    标签: c# class generics parameters overloading


    【解决方案1】:

    您必须将它们声明为两个单独的类。您也许可以使用继承:

    class ResourceHolder<ResourceT, IdentifierT, ParameterT>
    {
    }
    
    class ResourceHolder<ResourceT, IdentifierT> 
        : ResourceHolder<ResourceT, IdentifierT, Object>
    {
    }
    

    但它们仍然是两种不同的类型,并且您必须重载任何需要 ParameterT 作为输入的方法。

    【讨论】:

    • 好的,我找到你了。同时,我尝试了其他方法,例如提供该方法,该方法实际上需要该 ParameterT 并且只是将该方法设为通用方法,并将 ParameterT 作为属性参数。这有点像我预期的那样奏效。现在我不需要为特定实例声明我实际上不需要的泛型类型的 uncassery 类。无论如何,谢谢你们的帮助!
    【解决方案2】:

    一个 C# 类必须有固定数量的类型参数,所以你想要的实际上是不可能的。您可以声明一个虚拟类型并将其用作第三个参数,将其隐藏在方法调用后面,但更好的方法是重新考虑 ResourceHolder 的职责(如果有的话),这意味着它不需要做任何事情与ParameterT。听起来你真的有两个类,而你目前正在使用一个类——你可能想要一个 ResourceHolder 基类,例如,TextureHolderSoundBufferHolder 派生自该类。

    【讨论】:

      猜你喜欢
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 2016-06-01
      相关资源
      最近更新 更多