Restore Color class semantics for derived type equality - #36076
Closed
jfversluis wants to merge 1 commit into
Closed
Restore Color class semantics for derived type equality#36076jfversluis wants to merge 1 commit into
jfversluis wants to merge 1 commit into
Conversation
Restore Color to class semantics while preserving immutability metadata, remove record-generated public API entries, and add regression coverage for derived Color equality. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 36076Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 36076" |
jfversluis
marked this pull request as draft
June 23, 2026 10:03
Member
Author
|
Looking closer, I think this might be intentional and what the behavior should be |
Contributor
|
@jfversluis I think you're probably right that the record/value-object direction is the better design. The issue I filed exposed what I’d consider a Liskov Substitution problem: Color was open to inheritance, but record equality made that inheritance model no longer substitute cleanly. My suggestions:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Fixes #36034.
This intentionally reverts the
Colortype-kind change from #33824 / commit 797df24 while keeping the useful[ImmutableObject(true)]metadata from that change.The regression is caused by converting
Colorfrom a class to arecord class: records addEqualityContractchecks, so derived colors with the same ARGB value no longer compare equal. KeepingColoras a record and only changing equality would also leave existing class-based subclasses source-broken, because C# only allows records to inherit from records.This restores
Colorto a normal class, removes the record-generated unshipped API entries, and adds regression coverage for base-vs-derivedColorequality in both directions,EqualityComparer<Color>.Default, and matching hash codes.cc @AdamEssenmacher, could you review this since you reported the issue?