小编Dav*_*sha的帖子

C# 如何在不显式类型转换的情况下调用基类 == 运算符?

我有一个基类(TFoo)和后代类(TBar);我将覆盖两者的 == 运算符。我希望后代类检查其自己的字段,并调用基类的 == 运算符,以便基类进行自己的检查。

在下面的代码中,您将看到在 中TBar == operator,我类型转换为基类以检查基类相等性,如下所示:(TFoo)a == (TFoo)b

(这似乎有效!希望我在测试中没有遗漏任何问题。)

然而,我正在寻找一种更优雅的方法来做到这一点。例如,(base)a == (base)ba base.== bbase.==(a, b)a.base.Equals(b)或某事。

显然,上面的例子是行不通的,而且可能看起来很可笑;如前所述,(TFoo)a == (TFoo)b确实可以正常工作。我正在寻找一种无需显式命名该类即可执行此操作的方法TFoo

编辑:感谢所有精彩的回复!我修改了下面的原代码,可以.GetType()直接比较;我删除了.Name一些人指出的愚蠢且危险的内容。

class TFoo
{
    public int foo;

    public static bool operator ==(TFoo a, TFoo b)
    {
        return a.GetType() == b.GetType()
            && a.foo == b.foo;
    }

    public static bool operator !=(TFoo a, TFoo b)
    {
        return !(a == …
Run Code Online (Sandbox Code Playgroud)

c# oop overriding operators

0
推荐指数
1
解决办法
816
查看次数

标签 统计

c# ×1

oop ×1

operators ×1

overriding ×1