Как-то так:
abstract class Matrix<T> where T:Matrix<T>
{
// Абстрактная функция сложения
public abstract T Sum(T A, T B);
}
class RectMatrix : Matrix<RectMatrix>
{
public override RectMatrix Sum(RectMatrix A, RectMatrix B)
{
}
}
Но как-то оно не очень смотрится...