public static class Klass {
public static readonly Vector Zero = new Vector(0, 0);
public Vector(int x, int y) {
public Vector(in Vector vec) {
public override string ToString() => $"{{{X}, {Y}}}";
public static readonly Bound Zero = new Bound(Vector.Zero, Vector.Zero);
public Bound(in Vector offset, in Vector extent) {
public override string ToString() => $"[{Offset}, {Extent}]";
public static class Strukt {
public sealed class Vector {
public static readonly Vector Zero = new Vector(0, 0);
public Vector(int x, int y) {
public Vector(Vector vec) {
public override string ToString() => $"{{{X}, {Y}}}";
public sealed class Bound {
public static readonly Bound Zero = new Bound(Vector.Zero, Vector.Zero);
public Bound(Vector offset, Vector extent) {
Offset = new Vector(offset);
Extent = new Vector(extent);
public override string ToString() => $"[{Offset}, {Extent}]";
public static void Main() {
Klass.Bound referenceBound = Klass.Bound.Zero;
Strukt.Bound testBound = Strukt.Bound.Zero;
testBound.Offset.X == referenceBound.Offset.X &&
testBound.Offset.Y == referenceBound.Offset.Y &&
testBound.Extent.X == referenceBound.Extent.X &&
testBound.Extent.Y == referenceBound.Extent.Y;
Console.WriteLine($" {testBound} = {referenceBound} ");
Console.WriteLine($"!!!!!! {testBound} ≠ {referenceBound} !!!!!!");
referenceBound.Offset = new Klass.Vector(1, 0);
testBound.Offset = new Strukt.Vector(1, 0);
referenceBound.Extent.X += 2;
referenceBound.Extent.X = 3;