SammuelMiranda
SammuelMiranda

Reputation: 460

Intelligent Generic Static Method

I wrote C# code as described below that inherits a class from a generic class with static methods. I want to call the child class for its static methods (inherited from the base class) without having to specify the type.

EDITED! More "real" code

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>();
    }
}

So, instead of having to call method<h>() i'd like to just call method(), so the code should assume that "h" is the caller type. Like in:

How can I do it?

Upvotes: 0

Views: 98

Answers (2)

Niels Filter
Niels Filter

Reputation: 4528

You could change method<h> to method and make it an instance method:

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

And then call it as follows:

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

Upvotes: 1

wvisaacs
wvisaacs

Reputation: 188

Static methods are not inherited in C#

See this answer for an idea of a potential implementation: Stack Overflow whats-the-correct-alternative-to-static-method-inheritance

Upvotes: 3

Related Questions