Интерфейс, определяющий сигнатуру конструктора?

  1. 2 ^ 53 - размер значащей / мантиссы 64-битного числа с плавающей запятой, включая скрытый бит.
  2. Примерно да, поскольку sifnificand фиксирован, но экспонента изменяется.
  3. Дополнительную информацию см. в статье wikipedia .

506
задан Adi Lester 14 July 2012 в 19:52
поделиться

4 ответа

Вы не можете. Это иногда - боль, но Вы не были бы в состоянии назвать его с помощью нормальных методов так или иначе.

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

Одна точка о том, если бы Вы могли , определяет конструктора в интерфейсе, Вы испытали бы затруднения при получении классов:

public class Foo : IParameterlessConstructor
{
    public Foo() // As per the interface
    {
    }
}

public class Bar : Foo
{
    // Yikes! We now don't have a parameterless constructor...
    public Bar(int x)
    {
    }
}
311
ответ дан kevinarpe 15 July 2012 в 06:52
поделиться
  • 1
    Какой смысл того, чтобы поместить статические функции в классе вместо в, скажем, отдельном functions.php файле? – billmalarky 19 April 2013 в 12:46

Вы не можете.

Интерфейсы определяют контракты, которые другие объекты реализуют и поэтому не имеют никакого состояния, которое должно быть инициализировано.

, Если у Вас есть некоторое состояние, которое должно быть инициализировано, необходимо рассмотреть использование абстрактного базового класса вместо этого.

61
ответ дан Michael 15 July 2012 в 06:52
поделиться

Вы не делаете.

конструктор является частью класса, который может реализовать интерфейс. Интерфейс является просто контрактом методов, которые должен реализовать класс.

0
ответ дан royatl 15 July 2012 в 06:52
поделиться
  • 1
    +1 Довольно впечатляющий. Не читаемый или что-либо, но впечатляющий. – Ron Romero 26 December 2011 в 23:28

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

public interface IFoo<T> where T : new()
{
  void SomeMethod();
}

public class Foo : IFoo<Foo>
{
  // This will not compile
  public Foo(int x)
  {

  }

  #region ITest<Test> Members

  public void SomeMethod()
  {
    throw new NotImplementedException();
  }

  #endregion
}

, С другой стороны, если Вы хотите протестировать, если тип имеет paramerterless конструктора, можно сделать то отражение использования:

public static class TypeHelper
{
  public static bool HasParameterlessConstructor(Object o)
  {
    return HasParameterlessConstructor(o.GetType());
  }

  public static bool HasParameterlessConstructor(Type t)
  {
    // Usage: HasParameterlessConstructor(typeof(SomeType))
    return t.GetConstructor(new Type[0]) != null;
  }
}

Hope это помогает.

20
ответ дан Jeroen Landheer 15 July 2012 в 06:52
поделиться
  • 1
    Или можно использовать - должностное лицо в простом случае, как в ennuikiller' s пример. xargs имеет немного больше силы для более сложного использования. – Orbling 22 November 2010 в 20:28
Другие вопросы по тегам:

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