Ну тут вероятно надо
// Конструктор
public QuadMatrix(long n):base(n, n)
т.к. в базовом классе нет конструктора по умолчанию и надо вызвать один из существующих.
И учти, что второе наследование не повлияет на функцию Sum т.е. T уже задан первым наследованием. В ней останутся типы RectMatrix. Тут либо отказаться от такого наследования и делать перегруженные методы, либо наследоваться только от Matrix<T>
Можно было бы попробовать сделать вот так:
abstract class Matrix
{
public abstract T Sum<T> (T A, T B) where T:Matrix;
}
Но тогда тебе придется работать с классом Activator для создания экземпляров неизвестного типа... так что не знаю что лучше... может самое правильное сделать перегруженную функцию Sum в каждом классе. Т.е. сделать ее не абстрактной, а просто реализовать нужного вида.
abstract class Matrix
{
}
class RectMatrix : Matrix
{
public RectMatrix Sum(RectMatrix A, RectMatrix B)
{
}
}
class QuadMatrix : RectMatrix
{
public QuadMatrix Sum(QuadMatrix A, QuadMatrix B)
{
}
}