【问题标题】:C++/CLI overloaded operator is not accessed via C#不能通过 C# 访问 C++/CLI 重载运算符
【发布时间】:2012-08-31 09:09:49
【问题描述】:

我有以下 C++/CLI 类:

 public ref class MyClass
    {
    public:
        int val;
        bool operator==(MyClass^ other)
        {
            return this->val == other->val;
        }

        bool Equals(MyClass^ other)
        {
            return this == other;
        }
    };

当我尝试从 C# 验证 MyClass 的两个实例是否相等时,我得到了错误的结果:

MyClass a = new MyClass();
MyClass b = new MyClass();

//equal1 is false since the operator is not called
bool equal1 = a == b;
//equal2 is true since the comparison operator is called from within C++\CLI
bool equal2 = a.Equals(b);

我做错了什么?

【问题讨论】:

标签: c# c++-cli operator-overloading


【解决方案1】:

您重载的 == 运算符在 C# 中不可访问,bool equal1 = a == b 行通过引用比较 ab

二元运算符在 C# 中被静态方法覆盖,您需要提供此运算符:

static bool operator==(MyClass^ a, MyClass^ b)
{
  return a->val == b->val;
}

当覆盖== 时,您还应该覆盖!=。在 C# 中,这实际上是由编译器强制执行的。

【讨论】:

  • 请注意,对于值类型,您也应该对参数使用句柄语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
相关资源
最近更新 更多