Перегрузка оператора абстрактного класса C#

У меня есть абстрактный класс Vector, в котором я хотел бы перегрузить операторы +,-, * и т. д.
Я хочу, чтобы любые производные классы могли их использовать и возвращали объект того же типа, что и вызывающий объект.
Я пытался использовать дженерики (вкратце, как показано ниже), но не смог найти законного способа сделать это:

public static T operator +<T>( T V1, T V2) where T : Vector
{
     //some calculation
     return new T(args);
}

Затем я попытался сделать это, просто используя базовый класс:

    public static Vector operator+(Vector V1, Vector V2)
    {
        if (V1.Dimension != V2.Dimension)
            throw new VectorTypeException("Vector Dimensions Must Be Equal");
        double[] ArgList = new double[V1.Dimension];
        for (int i = 0; i < V1.Dimension; i++) { ArgList[i] = V1[i] + V2[i]; }

        return (Vector)Activator.CreateInstance(V1.GetType(), new object[] { ArgList});
    }

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

Проблема, с которой я столкнулся, заключается в том, что я не могу обеспечить, чтобы все такие дочерние классы имели конструктор с соответствующей сигнатурой, и я не могу вызвать базовый конструктор для создания объекта.

Каковы способы либо (а) заставить одно из этих действий работать, либо (б) сделать это изящно другим способом?

7
задан ThinkingStiff 14 June 2012 в 03:20
поделиться