Как я могу применить метод Constructor с интерфейсом класса? - PullRequest
1 голос
/ 20 сентября 2010

Конструктор имеет не общее имя, а то же имя, что и класс, поэтому существует проблема с синтаксисом для принудительного применения их в классе интерфейса.Каков же синтаксис для чего-то подобного:

Interface IInterface {

    <class-name-of-implementer>(string param) {}
}

Проблема, которую я вижу при создании метода инициализации, заключается в том, что клиентское приложение вашей framwork / библиотеки может просто забыть вызвать его!Мне кажется, что если бы конструктор был просто назван __Constructor, как в некоторых других языках, это было бы возможно, поэтому это невозможно из-за синтаксиса!

Синтаксис не должен управлять дизайном, а семантикой.

Ответы [ 3 ]

3 голосов
/ 20 сентября 2010

Боюсь, вы не можете.

Вообще говоря, вы не сможете использовать такой конструктор в любом случае - как бы вы ожидали его вызова? Вы можете применять конструктор без параметров для параметра типа, например:

public class Foo<T> where T : new()

, но вы не можете указать обязательные параметры.

Ранее я предполагал, что было бы полезно иметь возможность указывать статические элементы (включая конструкторы) в интерфейсах, только для ограничений типа (и использовать их в выражениях на основе этих параметры типа). Подробнее см. в моем блоге .

2 голосов
/ 20 сентября 2010

Вы не можете сделать это.Ваша лучшая ставка будет

interface IInterface 
{
  void Initialize(string param);
}

, где Initialize выполняет некоторую работу по инициализации (если это то, что вам нужно).

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

Конструкторы недопустимы в интерфейсах.

Обходной путь может заключаться в том, чтобы поместить метод initialize () в конструктор и выполнить все связанные с конструктором вещи.Грязно, но это все, что ты можешь сделать.

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