rash305
rash305

Reputation: 41

C#: Implement a abstract property in an interface to implement a child

I couldn't find the answer in the internet so I gonna ask for your help. I have an abstract class:

public abstract class AbstractClass
{
    String Name { get; }        
}

Child Class 1:

public class ApplicationDetailsModel : AbstractClass
{
   // This will implement unique properties
}

And each class that implements IComponent will implement a child of "AbstactClass".

An example implementation:

public class ExampleClass : IComponent
{
    public ApplicationDetailsModel DetailsModel;
}

And an interface

public interface IComponent : IPageViewModel
{
    AbstractClass DetailsModel { get; }
}

This example does not compile because the interface forces to implement

AbstractClass DetailsModel = new ApplicationDetailsModel();

Is there a correct way to force an implementation of a child property of a specific abstract class in an interface?

Upvotes: 3

Views: 1038

Answers (1)

Dave
Dave

Reputation: 3017

Make your interface generic with a constraint

public interface IComponent<T> : IPageViewModel
    where T : AbstractClass
{
    T DetailsModel {get;}
}

By example:

public class ExampleClass : IComponent<ApplicationDetailsModel>{
{
    public ApplicationDetailsModel DetailsModel { get; private set; }
}

Upvotes: 6

Related Questions