Может ли интерфейс требовать свойство, но не указывать требуемый тип? - PullRequest
1 голос
/ 28 марта 2012

У меня есть простой интерфейс, определенный следующим образом:

interface iFace
{
   int Value { get; }
}

В этом случае любой класс, реализующий iFace, должен иметь свойство с именем Value типа int.Использование этого интерфейса будет связано с привязкой данных, и мне все равно, какого типа это свойство.У меня есть варианты?Я хотел бы избежать этого решения:

interface iFace<T>
{
   T Value { get; }
}

, поскольку я хотел бы сослаться на интерфейс без указания типа

Редактировать:

Я хотел быуметь применять один и тот же интерфейс как к элементу управления NumericUpDown, так и к элементу управления Trackbar.Одно свойство value имеет тип decimal, а другое - тип int.

В этом случае наличие свойства типа object не будет работать.

Ответы [ 3 ]

7 голосов
/ 28 марта 2012

Если вам все равно, является ли он строго типизированным, измените тип свойства на object.

3 голосов
/ 28 марта 2012

Попробуйте это:

interface MyInterface
{
    Object MyProperty
    {
        get;
        set;
    }
}

class MyClass : MyInterface
{
    Object MyInterface.MyProperty
    {
        get
        {
            return this.MyProperty;
        }
        set
        {
            if (value is MyType)
                this.MyProperty = (MyType)value;
        }
    }

    public MyType MyProperty
    {
        get;
        set;
    }
}
1 голос
/ 28 марта 2012

В ответ на ваши изменения: вы столкнулись с известной проблемой, что в .NET нет интерфейса INumeric.Он существует в исходном коде, который я видел, но он был закомментирован, что означает, что Microsoft отнеслась к нему достаточно серьезно и столкнулась с некоторыми существенными проблемами.

Хорошее решение Дэнни Варода;Вы также можете расширить его, создав универсальную и неуниверсальную версию интерфейса.Другое решение заключается в добавлении методов в интерфейс, которые представляют числовые операции, для которых вы сейчас используете математические операторы, например, Increment().

Я назову здесь интерфейс IHasValue (частичнопотому что это немного комедийновсе остальное кроме повторяющегося кода математического оператора.

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

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