diff --git a/src/Graphics/src/Graphics/Color.cs b/src/Graphics/src/Graphics/Color.cs index 7a0320334f80..d08e2aef3847 100644 --- a/src/Graphics/src/Graphics/Color.cs +++ b/src/Graphics/src/Graphics/Color.cs @@ -12,6 +12,7 @@ namespace Microsoft.Maui.Graphics /// [DebuggerDisplay("Red={Red}, Green={Green}, Blue={Blue}, Alpha={Alpha}")] [TypeConverter(typeof(Converters.ColorTypeConverter))] + [ImmutableObject(true)] public class Color { /// @@ -112,17 +113,7 @@ public override string ToString() return $"[Color: Red={r}, Green={g}, Blue={b}, Alpha={a}]"; } - public override int GetHashCode() - { - unchecked - { - int hashcode = Red.GetHashCode(); - hashcode = (hashcode * 397) ^ Green.GetHashCode(); - hashcode = (hashcode * 397) ^ Blue.GetHashCode(); - hashcode = (hashcode * 397) ^ Alpha.GetHashCode(); - return hashcode; - } - } + public override int GetHashCode() => ToInt(); public override bool Equals(object obj) { diff --git a/src/Graphics/tests/Graphics.Tests/ColorUnitTests.cs b/src/Graphics/tests/Graphics.Tests/ColorUnitTests.cs index edaba8d32657..7644347bc167 100644 --- a/src/Graphics/tests/Graphics.Tests/ColorUnitTests.cs +++ b/src/Graphics/tests/Graphics.Tests/ColorUnitTests.cs @@ -9,6 +9,14 @@ namespace Microsoft.Maui.Graphics.Tests { public class ColorUnitTests { + sealed class DerivedColor : Color + { + public DerivedColor(float red, float green, float blue, float alpha) + : base(red, green, blue, alpha) + { + } + } + [Fact] public void TestHSLPostSetEquality() { @@ -138,6 +146,19 @@ public void TestHashCode() Assert.True(color1.GetHashCode() == color2.GetHashCode()); } + [Fact] + public void EqualsDerivedColorWithSameArgbValue() + { + Color baseColor = new Color(1f, 0f, 0f, 1f); + Color derivedColor = new DerivedColor(1f, 0f, 0f, 1f); + + Assert.Equal(baseColor.ToInt(), derivedColor.ToInt()); + Assert.True(baseColor.Equals(derivedColor)); + Assert.True(derivedColor.Equals(baseColor)); + Assert.True(EqualityComparer.Default.Equals(baseColor, derivedColor)); + Assert.Equal(baseColor.GetHashCode(), derivedColor.GetHashCode()); + } + [Fact] public void TestHashCodeNamedColors() {