Функция интерфейса C #, возвращающая класс в зависимости от того, где она реализована - PullRequest
1 голос
/ 17 августа 2011

Я хотел бы иметь интерфейс, который в зависимости от того, какой класс его реализует, функция, объявленная интерфейсом, должна возвращать определенный класс.

должен ли я использовать что-то подобное?

public interface IMyInterface
{
    T returnClassInstance();
}

и как это должно выглядеть, когда я хочу внедрить это в классы?

public class MyClass : IMyInterFace
{
    public T returnClassInstance()
    {
        ClassInstance class = new ClassInstance();
        return (T)class;
    }    
}

Каков наилучший подход к чему-то подобному?

Ответы [ 4 ]

3 голосов
/ 17 августа 2011

Вы можете использовать дженерики в интерфейсах -

public interface IMyInterface<T>
{
    T returnClassInstance();
}

И при реализации этого интерфейса в классе просто используйте определенный класс в родовом

public class MyClass : IMyInterface<ClassInstance>
{
    public ClassInstance returnClassInstance()
    {
        ClassInstance obj = new ClassInstance();
        return obj;
    }
}
2 голосов
/ 17 августа 2011

Дженерики

public interface IMyInterface<T>
{
    T returnClassInstance();
}

public class MyClass : IMyInterFace<ClassInstance>
{
    public ClassInstance returnClassInstance()
    {
        ClassInstance class = new ClassInstance();
        return class;
    }    
}
1 голос
/ 17 августа 2011

Вы ищете шаблон Class Factory .Вот хорошая статья CodeProject об этом.

1 голос
/ 17 августа 2011

Вы можете объявить это так:

public interface IMyInterface<T>
{
    T ReturnClassInstance();
}

и реализовать это:

public class MyClass : IMyInterface<MyClass>
{
    public T ReturnClassInstance()
    {
        return this;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...