智能通用静态方法

时间:2015-06-08 12:39:45

标签: c# .net generics

我编写了如下所述的C#代码,它使用静态方法从泛型类继承了一个类。我想调用子类的静态方法(继承自基类),而不必指定类型。

EDITED!更“真实”的代码

public class Rec
{
    public string Name { get; set; }
    public override string ToString() { return this.Name; }

    public virtual void Load() { /* HERE IT READS A TEXT FILE AND LOAD THE NAME */ }
}

public class BaseClass<T> : Rec
{
    public T Argument { get; set; }
    public override void Load() { /* NOW IT LOADS ALSO THE ARGUMENT */ }

    public static H Method<H>() where H : Rec, new()
    {
        H iH = new H();
        iH.Load();
        iH.Name += " " + iH.Argument.ToString();
        return iH;
    }
}

public class Child : BaseClass<string> { }

public class SomeOtherClass
{
    public void Test()
    {
        Child i = Child.Method();
        //instead of Child.Method<Child>();
    }
}

因此,我不想调用method<h>()而只是调用method(),因此代码应该假设“h”是调用者类型。喜欢在:

我该怎么做?

2 个答案:

答案 0 :(得分:3)

静态方法不会在C#

中继承

有关潜在实施的想法,请参阅此答案:Stack Overflow whats-the-correct-alternative-to-static-method-inheritance

答案 1 :(得分:1)

您可以将method<h>更改为method并将其设为实例方法:

public class BaseClass<T> where T, new()
{
   public T method() { /* RETURN SOMETHING */ }
}

然后按如下方式调用它:

public class ABC : Child
{
   public void Test()
   {
      var iABC = this.method();
   }
}