Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Interface method that takes any property class/model C#

Tags:

c#

So, I want to create an interface which has a method that can take in any model class. For example

I have these three property class

class A
{
    public long id { get; set; }
    public string description { get; set; }
    public string code { get; set; }
}

class B
{
    public long someID { get; set; }
}

class C
{
    public long anydesign { get; set; }
}

class D
{
    public long Router { get; set; }
}

I have an interface

public interface IModel
{
    void Dosomething(A model); // Now in this example it takes the A model,But I want it to be set, so that that class that implements the interface can put any model as required
}

Now, I have a class that implements the mode Since the interface only takes the A model, I can pass in the A model in the class during implementation

public class ImplemenationA: IModel
{
    public void Dosomething(A model)
    {
        Console.WriteLine(model.description);
    }
}

Say i have another implemenation Class Now, I am guessing the below one wouldnt work, as the interface signature enforces only to take a Model A and not any other model

public class ImplementationB:IModel
{
   public void Dosomething(B model)
   {
        Console.WriteLine(model.someID);
   }
}

I want to the interface method to be invoked by any implementation class and use any model

like image 282
alangilbi Avatar asked Aug 05 '26 08:08

alangilbi


1 Answers

Based on your description you may want to use Generics. Since you're creating separate implementations you can apply the interface below to achieve a similar result.

public interface IModel<T>
{
   void Dosomething(T model);
}

public class ImplementationB : IModel<B>
{
   public void Dosomething(B model)
    {
      Console.WriteLine(model.someID);
    }
}
like image 82
Steve G. Avatar answered Aug 06 '26 21:08

Steve G.



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!