C# Interface for multiple classes

12,917

Solution 1

You don't inherit an Interface you implement it. There's no need to make a class partial to add an interface to it.

An interface is a contract that the class subscribes to saying that it will honour the methods described in the interface and will implement them appropriately. For your scenario you'd create a single interface and implement it in your classes, you can then pass the instances of the various accessor classes as instances of the interface.

For example:

public interface IDataProvider
{
    void LoadData();
}

The data providers would then look as follows:

public class MyDataProvder1 : IDataProvider
{
    // Some methods

    // Must implement LoadData
    public void LoadData()
    {
        // Do something
    }
}

public class MyDataProvder2 : IDataProvider
{
    // Some methods

    // Must implement LoadData
    public void LoadData()
    {
        // Do something
    }
}

You can then pass the objects as IDataProvider as follows:

IDataProvider DataProviderA = new MyDataProvider1();
IDataProvider DataProviderB = new MyDataProvider2();

// Call function that expects an IDataProvider

DoSomething(DataProviderA);
DoSomething(DataProviderB);

...

public void DoSomething(IDataProvider DataProvider)
{
    DataProvider.LoadData();
}

Hopefully that clears it up for you.

Solution 2

I think you are approaching this incorrectly.

When you make an interface, you're making a contract for those classes. Think of it as "my class will act as a IMyInterface".

If all of your classes have a common usage scenario, then a single, common interface may be appropriate (IDataProvider, given the class names..?).

Share:
12,917
GigaPr
Author by

GigaPr

In love with programmin in any shape or form!!

Updated on June 04, 2022

Comments

  • GigaPr
    GigaPr over 1 year

    I have a data provider project to access the database. this is composed by various classes (PersonDataProvider, JobDataProvider ...) I want to create an Interface. Do I have to create an Interface for each class? I was tempted to create one interface and than inherit on all the classes. This involves making all the projects classes partial and change the classes name.......But i think is not the best solution. Any suggestion?