📰 IT NachrichtenToday’s NYT Mini Crossword Answers for Saturay, Sept. 12(12.09.2026 um 07:43 Uhr)
🔧 AI Nachrichten Etzioni on AI: What kids tell chatbots, but not you(04.09.2026 um 16:05 Uhr)
🔧 AI Nachrichten OpenAI Wants to Know if an AI Industry Slowdown Would Even Be Legal(11.09.2026 um 01:28 Uhr)
🔧 AI Nachrichten OpenAI puts Pro subscriptions on hold due to Astra demand(10.09.2026 um 22:59 Uhr)
🔧 AI Nachrichten OpenAI’s feud with mathematicians is only escalating(11.09.2026 um 22:57 Uhr)
📰 IT NachrichtenToday’s NYT Mini Crossword Answers for Saturay, Sept. 12(12.09.2026 um 07:43 Uhr)
🔧 AI Nachrichten Etzioni on AI: What kids tell chatbots, but not you(04.09.2026 um 16:05 Uhr)
🔧 AI Nachrichten OpenAI Wants to Know if an AI Industry Slowdown Would Even Be Legal(11.09.2026 um 01:28 Uhr)
🔧 AI Nachrichten OpenAI puts Pro subscriptions on hold due to Astra demand(10.09.2026 um 22:59 Uhr)
🔧 AI Nachrichten OpenAI’s feud with mathematicians is only escalating(11.09.2026 um 22:57 Uhr)

🔧 Programmierung 🕛 vor 2 Monaten 6 Min Lesezeit
0

Class, Record and Struct in C#

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

Class, Record, and Struct serve as blueprints for creating new objects.






Classes



Classes are the foundational building blocks of Object-Oriented Programming (OOP).






Blueprint and instance






CODE
          // blueprint
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
}

// instance
var p = new Person { ID = 1, Name = "Mirza" }









Inspection



Printing the class instance in the console will just display it's name:




CODE
            var p1 = new Person { ID = 1, Name = "Mirza" };
Console.WriteLine(p1); // Person






To print the actual, we'd need print each property explicitly:




CODE
            Console.WriteLine(p1.ID); // 1
Console.WriteLine(p1.Name); // "Mirza"









Mutation



C# classes are mutable, meaning the originally set values can be altered:




CODE
            var p1 = new Person { ID = 1, Name = "Mirza" };
Console.WriteLine(p1.Name); // "Mirza"

p1.Name = "Armin";
Console.WriteLine(p1.Name); // "Armin"






That said, this can be tweaked by changing the accessor the class property.




CODE
            public class Person
{
public int ID { get; set; }
public string Name { get; init; } // <--
}






This time around if we try to change the value of the Name property after initialization, the C# compiler will start to complain.




CODE
            var p1 = new Person { ID = 1, Name = "Mirza" };
p1.Name = "Edis"; // ❌






The init accessor allows you to create properties that can only be assigned a value during object initialization.






Memory location



Classes are reference types and are allocated on the heap. If we create two distinct class objects and assign one to the other, both objects will point to the exact same reference in memory:




CODE
            var p1 = new Person { ID = 1, Name = "Mirza" };
var p2 = new Person { ID = 2, Name = "Mirza" };

p1 = p2;
p1.Name = "Sead";

Console.WriteLine(p1.Name); // Sead
Console.WriteLine(p2.Name); // Sead






If we change a value in one of the objects, it will be reflected in both.






Equality



Two class instances (objects) aren't equal even if they share the same values:




CODE
            var p1 = new Person { ID = 1, Name = "Mirza" };
var p2 = new Person { ID = 1, Name = "Mirza" };

Console.WriteLine(p1 == p2); // False
Console.WriteLine(p1.Equals(p2)); // False
Console.WriteLine(ReferenceEquals(p1, p2)); // False






To compare the two, we'd need to check each property on each class and compare to the other:




CODE
            private static bool AreEqual(Person? x, Person? y)
{
// If both are the same memory instance (or both null), they are equal
if (ReferenceEquals(x, y)) return true;

// If only one is null, they are not equal
if (x is null || y is null) return false;

// If actual values are equal
return x.ID == y.ID && x.Name == y.Name;
}






In this case, the values of these two instances would indeed be equal.




CODE
            Console.WriteLine(AreEqual(p1, p2)); // True









Deconstruction



Classes support deconstruction through manual implementation of the Deconstruct method:




CODE
            public class Person
{
public int ID { get; set; }
public string Name { get; set; }

public void Deconstruct(out int id, out string name)
{
id = ID;
name = Name;
}
}






Usage:




CODE
            var p = new Person { ID = 1, Name = "Mirza" };

var (id, name) = p;

Console.WriteLine(id); // 1
Console.WriteLine(name); // "Mirza"









Structs



Structs are lightweight data structures designed for small, simple data values.






Blueprint and instance






CODE
            // blueprint
public struct Person
{
public int ID { get; set; }
public string Name { get; set; }
}

// instance
var p = new Person { ID = 1, Name = "Mirza" };









Inspection



Just like classes, structs cannot print all contents at once:




CODE
            Console.WriteLine(p); // Person
Console.WriteLine(p.ID); // 1
Console.WriteLine(p.Name); // Mirza









Mutation



Structs also allow mutation.




CODE
            var p = new Person { ID = 1, Name = "Mirza" };
Console.WriteLine(p.Name); // Mirza

p.Name = "Armin";
Console.WriteLine(p.Name); // Armin






Unless we forbid it using the init accessor.




CODE
            public struct Person
{
public int ID { get; set; }
public string Name { get; init; } // <--
}









Memory location



The structs are value types and are (usually) allocated on the stack.




CODE
            var p1 = new Person { ID = 1, Name = "Mirza" };
var p2 = new Person { ID = 2, Name = "Mirza" };

p1 = p2;
p1.Name = "Sead";

Console.WriteLine(p1.Name); // Sead
Console.WriteLine(p2.Name); // Mirza






If we change a value in one of the objects, it won't reflect in both of them.






Equality



Structs are compared by value.




CODE
            var p1 = new Person { ID = 1, Name = "Mirza" };
var p2 = new Person { ID = 1, Name = "Mirza" };

Console.WriteLine(p1.Equals(p2)); // True









Deconstruction



Structs support deconstruction through manual implementation of the Deconstruct method:




CODE
            public struct Person
{
public int ID { get; set; }
public string Name { get; set; }

public readonly void Deconstruct(out int id, out string name)
{
id = ID;
name = Name;
}
}






Usage:




CODE
            var p = new Person { ID = 1, Name = "Mirza" };

var (id, name) = p;

Console.WriteLine(id); // 1
Console.WriteLine(name); // "Mirza"









Records



Records are a newer type optimized for data-centric modeling, immutability, and built-in value equality. It brings the best of classes and structs.






Blueprint and instance






CODE
            // blueprint
public record Person (int ID, string Name);

// instance
var p = new Person(1, "Mirza");






The shorter syntax is the equivalent of doing:




CODE
            // blueprint
public record Person
{
public int ID { get; init; }
public string Name { get; init; }
}

// instance
var p = new Person { ID = 1, Name = "Mirza" };









Inspection



Printing the record instance will print the record and its contents:




CODE
            var p = new Person(1, "Mirza");
Console.WriteLine(p); // Person { ID = 1, Name = Mirza }









Mutation



Records are immutable by default:




CODE
            var p = new Person(1, "Mirza");
p.Name = "Edis"; // ❌

Console.WriteLine(p);






Unless the record is declared using the class-like syntax and we change the default accessor from init to set:




CODE
            public record Person
{
public int ID { get; set; } // <-- defaults to init
public string Name { get; set; } // <-- defaults to init
}

var p = new Person { ID = 1, Name = "Mirza" };
p.Name = "Edis"; // ✔️

Console.WriteLine(p.Name); // Edis









Memory location



The records are reference types and are allocated on the heap.




CODE
            var p1 = new Person { ID = 1, Name = "Mirza" };
var p2 = new Person { ID = 1, Name = "Mirza" };

p1 = p2;
p1.Name = "Sead";

Console.WriteLine(p1.Name); // Sead
Console.WriteLine(p2.Name); // Sead






If we change a value in one of the objects, it will be reflected in both.






Equality



Just like Structs, Records are compared by value.




CODE
            var p1 = new Person(1, "Mirza");
var p2 = new Person(1, "Mirza");

Console.WriteLine(p1 == p2); // True
Console.WriteLine(p1.Equals(p2)); // True
Console.WriteLine(Object.ReferenceEquals(p1, p2)); // False






Two objects share the same values, but do not point to the same reference in memory.






Deconstruction



Records support deconstruction out of the box.




CODE
            var p = new Person(1, "Mirza");

var (id, name) = p;

Console.WriteLine(id); // 1
Console.WriteLine(name); // "Mirza"









Bonus: Record Structs



Aside from Class-based Records, we can also create Records that behave as Structs.




  • Value type equality

  • Allocated (usually) on the stack

  • Mutable by default

  • All other benefits of Records




CODE
            // blueprint
public record struct Person(int ID, string Name);






Until next time 👋

Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
2 Quellen
Seattle Times sues Microsoft and OpenAI, alleging they trained their AI on its journalism
1 Quelle
Today’s NYT Mini Crossword Answers for Saturay, Sept. 12
1 Quelle
Etzioni on AI: What kids tell chatbots, but not you
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Class, Record and Struct in C#

Thematisch verwandte Begriffe: Class, Record, Struct · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...