ganjeii
ganjeii

Reputation: 1178

Define Generic List from interface

This may be an easy answer, but I'm creating what I thought was a simple interface that is to contain a definition for a generic list. Basically just something that says "create a generic list" like below:

public static List<UserControl> ViewList = new List<UserControl>();

This is proving more difficult than I expected. Maybe I'm going about it wrong? Each definition I try results in the expected list being a property or a method. For example, I've tried the below with no luck

//FirstTry
    public interface IAddToViewList
    {
        List<UserControl> ViewList();
    }
//Second
    public interface IAddToViewList
    {
        List<UserControl> ViewList { get; set; }
    }

Also I'm not sure if it's possible to include that the list should be static, I'm having trouble finding anyone with a question matching these requirements, maybe because it's just not possible or I'm thinking about it the wrong way?

Upvotes: 0

Views: 22

Answers (1)

Zach Lobato
Zach Lobato

Reputation: 101

Interfaces are collections of abstract methods. This means that you are unable to add class variables to them.

What you would need to functionally accomplish this is an Abstract Class.

public abstract class AddToViewList
{
    List<UserControl> ViewList;
}

However, all you need to do is define a method that returns a list

public interface IAddToViewList
{
    public List<UserControl> createViewList();
}

This will ensure that every class that implements IAddToViewList also has the createViewList() method. Now, in this case, UserControl would have to be a defined class and so this is a list of UserControl objects, not a "Generic List".

To make the list generic you have add the diamond after the interface name:

public interface IAddToViewList<UserControl>
{
    public List<UserControl> createViewList();
}

then when you are implementing your class it would look like this

public class Foo implements IAddToViewList<String>
{
    public List<String> createViewList(){
        // TODO
        return null;
    }
}

Upvotes: 1

Related Questions