rspec/rules/S3897/csharp/rule.adoc
Fred Tingaud 16f6c0aecf
Inline adoc when include has no additional value (#1940)
Inline adoc files when they are included exactly once.

Also fix language tags because this inlining gives us better information
on what language the code is written in.
2023-05-25 14:18:12 +02:00

70 lines
1.3 KiB
Plaintext

== Why is this an issue?
The ``++IEquatable<T>++`` interface has only one method in it: ``++Equals(<T>)++``. If you've already written ``++Equals(T)++``, there's no reason not to explicitly implement ``++IEquatable<T>++``. Doing so expands the utility of your class by allowing it to be used where an ``++IEquatable++`` is called for.
**Note**: Classes that implement ``++IEquatable<T>++`` should also be ``++sealed++``.
=== Noncompliant code example
[source,csharp]
----
class MyClass // Noncompliant
{
public bool Equals(MyClass other)
{
//...
}
}
----
=== Compliant solution
[source,csharp]
----
sealed class MyClass : IEquatable<MyClass>
{
public override bool Equals(object other)
{
return Equals(other as MyClass);
}
public bool Equals(MyClass other)
{
//...
}
}
----
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Implement 'IEquatable<XXX>'.
=== Highlighting
* primary: class declaration
* secondary: Equals signature
'''
== Comments And Links
(visible only on this page)
=== on 6 Mar 2017, 18:12:37 Ann Campbell wrote:
Updated as discussed [~amaury.leve]. Please double-check me.
=== on 7 Mar 2017, 10:02:09 Amaury Levé wrote:
\[~ann.campbell.2] Done!
endif::env-github,rspecator-view[]