Интерфейсы C#: действительно ли возможно относиться к типу, который реализует интерфейс в самом интерфейсе?

То, что я в основном хочу сделать, разработать универсальный интерфейс, что при реализации, результаты в классе, который может вести себя точно как T, за исключением того, что он имеет некоторую дополнительную функциональность. Вот пример того, о чем я говорю:

public interface ICoolInterface<T>
{
    T Value { get; set; }
    T DoSomethingCool();
}

public class CoolInt : ICoolInterface<int>
{
    private int _value;

    public CoolInt(int value)
    {
        _value = value;
    }

    public int Value
    {
        get { return _value; }
        set { _value = value; }
    }

    public int DoSomethingCool()
    {
        return _value * _value;
        // Ok, so that wasn't THAT cool
    }
}

И это - все хорошо и хороший, но для использования CoolInt, я должен сделать что-то вроде этого:

CoolInt myCoolInt = new CoolInt(5);
int myInt = myCoolInt.Value;

Я был бы очень скорее с точки зрения присвоения, по крайней мере, что работы CoolInt точно так же, как интервал. Другими словами:

CoolInt myCoolInt = 5;
int myInt = myCoolInt;

Для достижения этого я добавил эти два оператора преобразования к своему классу CoolInt:

    public static implicit operator CoolInt(int val)
    {
        return new CoolInt(val);
    }

    public static implicit operator int(CoolInt obj)
    {
        return obj.Value;
    }

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

C# имеет много названий "заполнителя" вещей, которые неявно определяются или должны все же быть определены. T, который традиционно используется в универсальном программировании, является одним примером. Я предполагаю, что ключевое слово значения, используемое в Свойствах, является другим. "Эту" ссылку можно было считать другим. Я надеюсь, что существует другой символ, который я могу использовать в своем интерфейсе для обозначения "типа класса, который реализует этот интерфейс", например, "реализатора".

    public static implicit operator implementer(int val)
    {
        return new IntVal(val);
    }

    public static implicit operator int(implementer obj)
    {
        return obj.Value;
    }

Действительно ли это возможно?

5
задан Knarf Navillus 25 July 2010 в 18:39
поделиться