Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Static child parameter in c#

TLDR: Is the a way in c# to define a parameter that is just static within the child class and therefore dynamic in the parent class?

I have an abstract class – A – with many children – B1, B2, … -. The parent class A has a parameter x. x is static within Bn, but not (necessarily) the same for two instances of different children of A, for example, B1 and B2.

I did come up with two non-optimal solutions:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I could define x dynamically in A, set x in the constructor of Bn and then create a dummy class-instance of Bn whenever I need to access the parameter, that works fine.

public abstract class A
{
    public A(...){...}
    public string x;
}
public class B:A
{
    public B(...) : base(...) 
    { 
        x = "This is B";
    }
}

// To access B.x
B dummy = new B(...);
dummy.x
// B.x would result in error, since x is not static

I could also define a static function in, for example, A that takes a type as input and returns the value of x for that given class Bn. Again, this would feel clumsy, plus A would need to be changed every time I code a new class Bm.

>Solution :

Are you after an interface with a static method?

With

public interface IX { static string? X {get; } }

abstract class A : IX {}

class B1: A
{
    public static string? X => "Hey, I'm B1";
}

class B2: A
{
    public static string? X => "Hey, I'm B2";
}

the following

Console.WriteLine(B1.X);
Console.WriteLine(B2.X);

prints

Hey, I'm B1
Hey, I'm B2

BTW. In c# 11 interfaces are getting some new features (from interface (C# Reference)):

Beginning with C# 8.0, an interface may define a default implementation for members. It may also define static members in order to provide a single implementation for common functionality.

and

Beginning with C# 11, an interface may define static abstract or static virtual members to declare that an implementing type must provide the declared members. Typically, static virtual methods declare that an implementation must define a set of overloaded operators.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading