Наследуйтесь универсальному базовому классу, примените ограничение и реализуйте интерфейс в C#

Это - вопрос о синтаксисе. У меня есть универсальный класс, который наследовался универсальному базовому классу и применяет ограничение к одному из параметров типа. Я также хочу, чтобы производный класс реализовал интерфейс. Ни за что в жизни я, может казаться, не выясняю правильный синтаксис.

Это - то, что я имею:

DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... }

Первая вещь, которая пришла на ум, была этим:

DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... }

Но это неправильно, поскольку это заставляет T2 должен реализовывать и IBar и IFoo, не DerivedFoo для реализации IFoo.

Я попробовал немного поиска с помощью Google, использования двоеточий, точек с запятой, и т.д., но я появился короткий. Я уверен, что ответ главный slappingly простой.

101
задан svick 24 August 2013 в 12:30
поделиться

3 ответа

[

] Вы включаете всю подпись вашего класса до того, как определите общие ограничения. [

] [
class DerivedFoo<T1, T2> : ParentFoo<T1, T2>, IFoo where T2 : IBar
{
    ...
}
]
152
ответ дан 24 November 2019 в 04:42
поделиться
[
public interface IFoo {}
public interface IBar {}

public class ParentFoo<T,T1> { }
public class DerivedFoo<T, T1> : ParentFoo<T, T1>, IFoo where T1 : IBar { }
]
8
ответ дан 24 November 2019 в 04:42
поделиться

Моя рекомендация: когда у Вас возникает вопрос о синтаксисе языка C#, прочтите спецификацию; поэтому мы ее и публикуем. Вы захотите прочитать раздел 10.1.

Чтобы ответить на ваш конкретный вопрос, порядок вещей в объявлении класса таков:

  • атрибуты, в квадратных скобках
  • модификаторы ("public", "static" и т.д.)
  • "partial"
  • "class"
  • имя класса
  • разделенный запятыми список деклараций параметров типов в угловых скобках
  • двоеточие следует за разделенным запятыми списком типов баз (базовый класс и реализованные интерфейсы, Базовый класс должен идти первым, если есть)
  • тип ограничения параметров
  • тело класса, окруженное скобками
  • точка с запятой

Все в этом списке является необязательным, за исключением "класса", имени и тела, но все должно появиться в этом порядке, если оно появится.

16
ответ дан 24 November 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: