Интерфейсная функция, возвращающая тип реализующего класса - PullRequest
2 голосов
/ 12 октября 2009

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

class MyClass : MyInterface<MyClass> // Would rather use one below

class MyClass : MyInterface   // Functions already know to use MyClass

Ответы [ 4 ]

3 голосов
/ 12 октября 2009

Если я правильно понимаю ваш вопрос, ваш единственный выбор без обобщений - использовать рефлексию для этого.

2 голосов
/ 12 октября 2009

Вы должны сделать что-то вроде этого:

interface MyInterface
{
    Type GetBaseType();
}

Но в этот момент было бы проще вызвать instance.GetType(), поскольку именно так будет выглядеть реализация этого метода.

Если под «типом» вы подразумеваете не отраженный тип, а то, что вы хотите использовать тип из интерфейса статически во время компиляции, вам нужно будет сделать интерфейс универсальным.

1 голос
/ 12 октября 2009

Вы достигаете этого так:

interface IUserService : IService<User>

тогда ваш класс будет:

class UserService : IUserService
1 голос
/ 12 октября 2009

Или

  1. Вы жестко задаете тип возврата как MyClass

  2. Вы определяете тип возвращаемого значения как MyInterface, а затем в реализации MyClass вы можете вернуть MyClass. Вызывающий не будет знать, что он получает, но может использовать typeof, чтобы узнать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...