继承泛型类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承泛型类型相关的知识,希望对你有一定的参考价值。

假设

  1. 我已经知道框架不允许在示例中讨论模式
  2. 我需要通过更简单的通用模式应用程序获益。

上下文

我正在审查客户端的代码,并确定了一些可在多个Classes / Structs中可靠实现的静态/实例方法。

我正在寻找一种类似于示例的方法,该方法将允许执行所描述的设计。

public class StaticObject<T>: T where T: class, new(){
    public void Method1(){}
    public int Method2(){}
}

public class Object : StaticObject<KeyedCollection<string, object>>{

}

Question

我可以利用什么替代方法来获得从Generic T继承并暴露两种静态方法的类的能力?

enter image description here

答案

好吧,也许你想要这样的东西。

using System;

public interface INeededForMethod1
{
    ...
}

public interface INeededForMethod2
{
    ...
}

public class GenericExtender<T>
{
    public T @Object { get; }
    private Func<T, INeededForMethod1> Method1Helper { get; }
    private Func<T, INeededForMethod2> Method2Helper { get; }

    public GenericExtender(
            Func<T> constructor,
            Func<T, INeededForMethod1> method1Helper,
            Func<T, INeededForMethod2> method2Helper)
   {
       this.Object = constructor();
       this.Method1Helper = method1Helper;
       this.Method2Helper = method2Helper;
   }

   public void Method1()
   {
       var method1Stuff = this.Method1Helper(this.@Object);
       ...
   }

   public void Method2()
   {
       var method2Stuff = this.Method2Helper(this.@Object);
       ...
   }        
}

细节是灵活的,如果您需要T的界面,您可以将其组合到GenericExtender<T>的实现中。

以上是关于继承泛型类型的主要内容,如果未能解决你的问题,请参考以下文章

ADA中的多类型继承通过泛型mixins

继承泛型类型

c++ 泛型 模板继承问题

unity的C#学习——泛型的创建与继承泛型集合类泛型中的约束和反射

为啥泛型类型约束不可继承/分层强制执行

Java泛型:类型擦除