diff --git a/Terminal.Gui/View/Layout/Dim.cs b/Terminal.Gui/View/Layout/Dim.cs index 3db2be5f9..45899dd78 100644 --- a/Terminal.Gui/View/Layout/Dim.cs +++ b/Terminal.Gui/View/Layout/Dim.cs @@ -78,7 +78,7 @@ namespace Terminal.Gui; /// /// /// -public abstract class Dim +public abstract record Dim { #region static Dim creation methods diff --git a/Terminal.Gui/View/Layout/DimAbsolute.cs b/Terminal.Gui/View/Layout/DimAbsolute.cs index 72d4e12f7..aa2108cc2 100644 --- a/Terminal.Gui/View/Layout/DimAbsolute.cs +++ b/Terminal.Gui/View/Layout/DimAbsolute.cs @@ -11,14 +11,8 @@ namespace Terminal.Gui; /// /// /// -public class DimAbsolute (int size) : Dim +public record DimAbsolute (int size) : Dim { - /// - public override bool Equals (object? other) { return other is DimAbsolute abs && abs.Size == Size; } - - /// - public override int GetHashCode () { return Size.GetHashCode (); } - /// /// Gets the size of the dimension. /// diff --git a/Terminal.Gui/View/Layout/DimAuto.cs b/Terminal.Gui/View/Layout/DimAuto.cs index 05ac21d42..408d3c74b 100644 --- a/Terminal.Gui/View/Layout/DimAuto.cs +++ b/Terminal.Gui/View/Layout/DimAuto.cs @@ -15,31 +15,8 @@ namespace Terminal.Gui; /// methods on the class to create objects instead. /// /// -public class DimAuto : Dim +public record DimAuto : Dim { - /// - public override bool Equals (object? other) - { - if (ReferenceEquals (this, other)) - { - return true; - } - - if (other is not DimAuto auto) - { - return false; - } - - return EqualityComparer.Default.Equals (MinimumContentDim, auto.MinimumContentDim) && - EqualityComparer.Default.Equals (MaximumContentDim, auto.MaximumContentDim) && - Style == auto.Style; - } - - /// - public override int GetHashCode () - { - return HashCode.Combine (MinimumContentDim, MaximumContentDim, Style); - } private readonly Dim? _maximumContentDim; /// diff --git a/Terminal.Gui/View/Layout/DimCombine.cs b/Terminal.Gui/View/Layout/DimCombine.cs index f8b5d141c..bf2006153 100644 --- a/Terminal.Gui/View/Layout/DimCombine.cs +++ b/Terminal.Gui/View/Layout/DimCombine.cs @@ -13,7 +13,7 @@ namespace Terminal.Gui; /// /// The left dimension. /// The right dimension. -public class DimCombine (AddOrSubtract add, Dim left, Dim right) : Dim +public record DimCombine (AddOrSubtract add, Dim left, Dim right) : Dim { /// /// Gets whether the two dimensions are added or subtracted. diff --git a/Terminal.Gui/View/Layout/DimFill.cs b/Terminal.Gui/View/Layout/DimFill.cs index 03cf6f3d2..a5c964f51 100644 --- a/Terminal.Gui/View/Layout/DimFill.cs +++ b/Terminal.Gui/View/Layout/DimFill.cs @@ -9,14 +9,8 @@ namespace Terminal.Gui; /// methods on the class to create objects instead. /// /// The margin to not fill. -public class DimFill (int margin) : Dim +public record DimFill (int margin) : Dim { - /// - public override bool Equals (object? other) { return other is DimFill fill && fill.Margin == Margin; } - - /// - public override int GetHashCode () { return Margin.GetHashCode (); } - /// /// Gets the margin to not fill. /// diff --git a/Terminal.Gui/View/Layout/DimFunc.cs b/Terminal.Gui/View/Layout/DimFunc.cs index c15e9fc8c..042f85318 100644 --- a/Terminal.Gui/View/Layout/DimFunc.cs +++ b/Terminal.Gui/View/Layout/DimFunc.cs @@ -9,11 +9,8 @@ namespace Terminal.Gui; /// methods on the class to create objects instead. /// /// -public class DimFunc (Func dim) : Dim +public record DimFunc (Func dim) : Dim { - /// - public override bool Equals (object? other) { return other is DimFunc f && f.Func () == Func (); } - /// /// Gets the function that computes the dimension. /// diff --git a/Terminal.Gui/View/Layout/DimPercent.cs b/Terminal.Gui/View/Layout/DimPercent.cs index 2ae81302a..b1bf7e7c6 100644 --- a/Terminal.Gui/View/Layout/DimPercent.cs +++ b/Terminal.Gui/View/Layout/DimPercent.cs @@ -13,14 +13,8 @@ namespace Terminal.Gui; /// If the dimension is computed using the View's position ( or /// ); otherwise, the dimension is computed using the View's . /// -public class DimPercent (int percent, DimPercentMode mode = DimPercentMode.ContentSize) : Dim +public record DimPercent (int percent, DimPercentMode mode = DimPercentMode.ContentSize) : Dim { - /// - public override bool Equals (object? other) { return other is DimPercent f && f.Percent == Percent && f.Mode == Mode; } - - /// - public override int GetHashCode () { return Percent.GetHashCode (); } - /// /// Gets the percentage. /// diff --git a/Terminal.Gui/View/Layout/DimView.cs b/Terminal.Gui/View/Layout/DimView.cs index 7a7568a95..b37f9bb7e 100644 --- a/Terminal.Gui/View/Layout/DimView.cs +++ b/Terminal.Gui/View/Layout/DimView.cs @@ -8,7 +8,7 @@ namespace Terminal.Gui; /// This is a low-level API that is typically used internally by the layout system. Use the various static /// methods on the class to create objects instead. /// -public class DimView : Dim +public record DimView : Dim { /// /// Initializes a new instance of the class. @@ -26,12 +26,6 @@ public class DimView : Dim /// public Dimension Dimension { get; } - /// - public override bool Equals (object? other) { return other is DimView abs && abs.Target == Target && abs.Dimension == Dimension; } - - /// - public override int GetHashCode () { return Target!.GetHashCode (); } - /// /// Gets the View the dimension is anchored to. /// diff --git a/UnitTests/View/Layout/Dim.FuncTests.cs b/UnitTests/View/Layout/Dim.FuncTests.cs index 12b9c562a..ab40cbf85 100644 --- a/UnitTests/View/Layout/Dim.FuncTests.cs +++ b/UnitTests/View/Layout/Dim.FuncTests.cs @@ -14,9 +14,12 @@ public class DimFuncTests (ITestOutputHelper output) Func f2 = () => 0; Dim dim1 = Func (f1); - Dim dim2 = Func (f2); + Dim dim2 = Func (f1); Assert.Equal (dim1, dim2); + dim2 = Func (f2); + Assert.NotEqual (dim1, dim2); + f2 = () => 1; dim2 = Func (f2); Assert.NotEqual (dim1, dim2);