私はEqualityテストがReferenceよりもValue Based Rahter(Stringの動作に似ている)になるようにしようとしているC++/CLIクラス定義を持っています。以下の定義は動作:C++/CLIアプリケーションで警告CA2226を修正するにはどうすればよいですか?
namespace MyCode
{
public ref class MyClass
{
public:
MyClass();
bool operator==(MyClass^ obj) { return Equals(obj); }
bool operator!=(MyClass^ obj) { return !Equals(obj); }
virtual bool Equals(MyClass^ obj);
virtual bool Equals(System::Object^ obj) override;
virtual int GetHashCode() override;
};
}
しかし、私の会社は現在、すべてのコードは、コード分析規則に準拠する必要があること(そして当然のように)必要とされます。コード分析は、一貫して上記のクラスの2回の警告を報告します。
CA2226 : Microsoft.Usage : Since ''MyClass'' redefines operator '==', it should also redefine operator '!='.
CA2226 : Microsoft.Usage : Since ''MyClass'' redefines operator '!=', it should also redefine operator '=='.
警告CA2226上のMicrosoftのドキュメントは、それを明確に、これは重要な警告で、抑制されるべきではないということになります - しかし、私は他に何ができるのでしょうか?
私はこの警告を除去するために、コードを「修正」する(可能な場合)方法を探しています。それは可能ですか、それとも抑圧する必要がありますか?
ありがとう!コンパイラとアナライザの両方がC++のインスタンス演算子を許可しているのは、C#がそうでないときには奇妙なことです。私はどちらか一方が、インスタンス演算子がrefクラスで許可されていないと不平を言うと期待します。 –