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);