C # Generics и проблема наследования - PullRequest
3 голосов
/ 13 сентября 2010

Эй, я хотел бы знать, возможно ли то, что я пытаюсь сделать?Комментарии в коде должны дать представление о том, чего я пытаюсь достичь :)

Ответы [ 2 ]

4 голосов
/ 13 сентября 2010

Я бы предложил извлечь метод DoTest в суперинтерфейс, например:

interface ITestable
{
    bool DoTest();
}

interface ITest<T> : ITestable
{
    T t { get; }
}

public class TestTest 
{       
    ITestable myTest;
}

На несвязанной заметке не рекомендуется, чтобы имена классов начинались с 'I', а свойства начинались со строчных букв.

0 голосов
/ 13 сентября 2010

Поместите метод DoTest() в неуниверсальный интерфейс ITest.Кроме того, я бы порекомендовал сделать интерфейс ITest неуниверсальной версией t.Это довольно распространенный подход, наблюдаемый с такими интерфейсами, как IEnumerable и IEnumerable<T>.Преимущество заключается в том, что неуниверсальная версия не становится менее функциональной и, следовательно, может быть полностью использована в местах, где не может быть предоставлен фактический параметр типа.

interface ITest
{
    object t { get; }
    bool DoTest();
}

interface ITest<T> : ITest
{
    T t { get; }
}

Благодаря явной реализации нежелательные неуниверсальная или универсальная версия (в зависимости от реальной ситуации) может быть скрыта:

class STest : ITest<S>
{
    public string t { get; private set; }
    string ITest.t { get { return t; } }
    public bool DoTest { ... }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...