C#检查类型T是否有运算符的接口/检查类型T是否有运算符的方法

C#检查类型T是否有运算符的接口/检查类型T是否有运算符的方法,c#,interface,C#,Interface,这可能吗?我有一系列的数学课。矢量2/3/4/5/6矩阵x3x3/4x4/5x5/6x6等 他们没有一个共同的阶级,他们从驱动。但它们都有+-*/ 我想上一堂像这样的课 interface IMathable { public static IMathable operator +(IMathable l, IMathable r); public static IMathable operator -(IMathable l, IMathable r); } class My

这可能吗?我有一系列的数学课。矢量2/3/4/5/6矩阵x3x3/4x4/5x5/6x6等

他们没有一个共同的阶级,他们从驱动。但它们都有+-*/

我想上一堂像这样的课

interface IMathable
{
    public static IMathable operator +(IMathable l, IMathable r);
    public static IMathable operator -(IMathable l, IMathable r);
}
class MyClass,其中T:IMathable
{
到达此处所需的数量;
公共MyClass(可从IMathable开始,可从IMathable结束)
{
达到此处所需的量值=从+到此处;
}
}

有没有办法做到这一点?我被建议让我所有的数学类都从抽象类开始,但我不能让所有这些数学类都有抽象类,因为它们是内置的,是库的一部分;我无法修复代码。

据我所知,您无法在接口上定义运算符

但操作符或多或少是语法上的糖类

您可以定义:

class MyClass <T> where T : IMathable
{
    T magnitude_required_to_reach_toHere;

    public MyClass (IMathable from, IMathable toHere)
        {
            magnitude_required_to_reach_toHere = from + toHere;
        }
}
事实上,运算符或多或少是一种方法,但该方法的标识符(即
+
-
)和编译器维护符号表并查找适当的运算符本身


编辑:你所要求的是不可能的。尤其是因为
IMathable
无法知道假定的返回类型应该是什么

然而,通过使用一些函数式编程,有一些解决方法:

interface IMathable {

    IMathable add (IMathable other);
    IMathable sub (IMathable other);

}

密切相关:看看我的答案,我想这可能是你的解决方案。但是这些类是内置的,是lib的一部分,我不能让它们拥有接口“IMathable”,它们是从
IMathable
继承的吗?建议的函数式编程是解决方案吗?谢谢你澄清我的好奇心。你的解决方案似乎让人心烦意乱,但我觉得它对一项简单的任务来说太沉重了。我希望我能像obj.GetType().GetOperator(“+”)这样做;非常感谢。
class MyClass <T> {

    T magnitude_required_to_reach_toHere;

    public MyClass (T from, T toHere, Func<T,T,T> addfunction) {
            magnitude_required_to_reach_toHere = addFunction(from,toHere);
        }
}
 MyClass<int> mc = new MyClass<int>(5,7,(x,y) => x+y);