Объявите класс C #, который реализует универсальный интерфейс - PullRequest
0 голосов
/ 10 июля 2011

Предположим, у меня есть пустой интерфейсный класс IBaseInterface, который используется только для "маркировки" реализующих классов как самих интерфейсов.

Есть ли способ сделать что-то подобное?

Например:

public class MyClass : T where T : IBaseInterface
{
}

Ответы [ 3 ]

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

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

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

Не так, нет. Я настоятельно рекомендую использовать шаблон композиции, чтобы попытаться достичь того, что вы пытаетесь. В качестве альтернативы вы можете найти DynamicProxy (или какое-либо другое решение для прокси-сервера).

0 голосов
/ 10 июля 2011

Тип, который вы объявляете, даже не является общим.Примерно так:

class MyClass<T> : T where T : IBaseInterface

может работать при некоторых обстоятельствах (например, если вместо шаблонов .Net используются шаблоны C ++), но это просто недопустимый код C #.

I 'Я не уверен, для чего используются «метки», но интерфейс со свойством

ClassType ClassType { get; }

, где ClassType - это enum, может работать.

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