使用泛型的子类进行C#运算符重载

tbg10101

我有一个看起来像这样的结构:

public struct Vector2d<T> where T : Unit {
    public double x;
    public double y;

    ...

    public static Vector2d<Length> operator * (Vector2d<Speed> speed, Vector2d<Duration> duration) {
        return new Vector2d<Length>(speed.x * duration.x, speed.y * duration.y);
    }
}

长度,速度和持续时间类型都是单位的子类型。(T也继承自Unit)

但是,编译器说:

二进制运算符的参数之一必须是包含类型。

这让我感到奇怪,因为提供的类型是包含类型的子类。

为什么我试图做违法的事情?

我知道Vector2不是Vector2的子类,但是我没有尝试使用泛型类型的值。运算符中使用的所有数据都是Vector2类。

蒂莫西·G。

根据此错误MSDN页面

二进制运算符的定义指定了两个参数,它们的类型不同于定义该运算符的类或结构的类型。在类或结构中定义运算符时,至少一个参数必须是该类或结构的类型。

在您的情况下,您的运算符未使用Vector2d<T>类型(您正在使用Vector2d<Speed>Vector2d<Duration>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

泛型C#的重载运算符

来自分类Dev

C#二进制运算符重载中的泛型

来自分类Dev

C#泛型中的运算符

来自分类Dev

C#泛型类型相等运算符

来自分类Dev

从C#使用重载的VB.NET Not运算符

来自分类Dev

重载基本运算符(C#)

来自分类Dev

C#运算符重载==

来自分类Dev

C#加法运算符重载

来自分类Dev

C ++禁用子类中的重载运算符

来自分类Dev

C ++禁用子类中的重载运算符

来自分类Dev

C ++重载运算符<<用于子类

来自分类Dev

C ++:使用模板重载<<运算符

来自分类Dev

C ++运算符使用向量重载<<

来自分类Dev

如何使用C#泛型将方法限制为整数类型并仍然使用运算符

来自分类Dev

当指定类型的运算符重载存在时,C#编译器如何确定泛型方法中的引用相等性?

来自分类Dev

当指定类型的运算符重载存在时,C#编译器如何确定泛型方法中的引用相等性?

来自分类Dev

子类中的重载运算符

来自分类Dev

使用泛型对Optionals进行覆盖/运算符会导致无限循环

来自分类Dev

C#泛型类运算符不起作用

来自分类Dev

C#泛型类运算符不起作用

来自分类Dev

如何检查泛型是否具有运算符?C#

来自分类Dev

如何在继承的类上使用运算符重载以匹配C#中的基本运算符

来自分类Dev

C ++运算符重载++

来自分类Dev

C ++-重载[]运算符

来自分类Dev

C ++运算符重载

来自分类Dev

C ++“ *”运算符重载

来自分类Dev

C ++运算符>>重载

来自分类Dev

()运算符重载c ++

来自分类Dev

C ++运算符重载[]