Используйте тип, определенный в универсальном типе - PullRequest
3 голосов
/ 04 июля 2011

Извиняюсь за заголовок - я действительно не могу придумать очень хороший способ описать мое требование.

Я хочу иметь возможность определить общий интерфейс (или класс, это не имеет значения)при этом параметр Type предоставляет другой тип, к которому можно получить доступ из класса.Надеемся, что этот фрагмент кода объяснит.

interface IFoo
{
   TOtherType DependentType { get; }
}

interface IMyGeneric<TBar> where TBar : IFoo
{
   TBar ReturnSomeTBar();
   TBar.DependentType ReturnSomeTypeOnTBar();
}

Так что в этом примере я хочу, чтобы класс реализовал IFoo (например, Foo) и представил другой тип, DependentType (например, int), чтобы я могиспользуйте IMyGeneric<Foo>, у которого есть методы:

public Foo ReturnSomeTBar()
{
}

public int ReturnSomeTypeOnTBar()
{
}

Ясно, что приведенный выше код не компилируется, так есть ли способ добиться такого поведения универсальной цепочки?

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Во-первых, IFoo тоже должен быть универсальным

interface IFoo<TDependent>
{
   TDependent DependentType { get; }
}

Тогда IMyGeneric должен будет иметь 2 параметра типа

interface IMyGeneric<TBar,TDependent> where TBar : IFoo<TDependent>
{
   TBar ReturnSomeTBar();
   TDependent ReturnSomeTypeOnTBar();
}

Возможно, это приблизит вас к вашему солутину;после.

1 голос
/ 04 июля 2011

TBar.DependentType должен был бы быть частью TBar, это не тот тип, к которому вы можете применить ограничение для параметра универсального типа.

Как насчет использования 2 параметров типа вместо этого?IMyGenertic<TBar, TFoo>?Обходное решение?

...