C# Struct
In C#, a struct is a value type data structure. It allows a single variable to store various data types of related data. The struct keyword is used to create a struct.
Structs are used to represent a record. Suppose you want to track the dynamics of books in a library. You might want to track the following properties for each book:
- Title
- Author
- Subject
- Book ID
Defining a Struct
To define a struct, you must use the struct statement. The struct statement defines a new data type with multiple members for your program.
For example, you can declare a Book struct as follows:
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};
The following program demonstrates the usage of structs:
Example
using System;
using System.Text;
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};
public class testStructure
{
public static void Main(string[] args)
{
Books Book1; /* Declare Book1 of type Books */
Books Book2; /* Declare Book2 of type Books */
/* Detailed description of book 1 */
Book1.title = "C Programming";
Book1.author = "Nuha Ali";
Book1.subject = "C Programming Tutorial";
Book1.book_id = 6495407;
/* Detailed description of book 2 */
Book2.title = "Telecom Billing";
Book2.author = "Zara Ali";
Book2.subject = "Telecom Billing Tutorial";
Book2.book_id = 6495700;
/* Print Book1 information */
Console.WriteLine("Book 1 title : {0}", Book1.title);
Console.WriteLine("Book 1 author : {0}", Book1.author);
Console.WriteLine("Book 1 subject : {0}", Book1.subject);
Console.WriteLine("Book 1 book_id : {0}", Book1.book_id);
/* Print Book2 information */
Console.WriteLine("Book 2 title : {0}", Book2.title);
Console.WriteLine("Book 2 author : {0}", Book2.author);
Console.WriteLine("Book 2 subject : {0}", Book2.subject);
Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);
Console.ReadKey();
}
}
When the above code is compiled and executed, it produces the following result:
Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700
Characteristics of C# Structs
You have used a simple struct named Books. Structs in C# are different from traditional C or C++ structs. C# structs have the following characteristics:
- Structs can have methods, fields, indexers, properties, operator methods, and events.
Structures can define constructors, but not destructors. However, you cannot define a parameterless constructor for a structure. The parameterless constructor (default) is automatically defined and cannot be changed.
Unlike classes, structures cannot inherit from other structures or classes.
Structures cannot be used as base structures for other structures or classes.
Structures can implement one or more interfaces.
Structure members cannot be specified as abstract, virtual, or protected.
When you create a structure object using the New operator, the appropriate constructor is called to create the structure. Unlike classes, structures can be instantiated without using the New operator.
If the New operator is not used, the fields must be initialized before the fields are assigned and the object is used.
Class vs Structure
Classes and structures have the following basic differences:
Classes are reference types, structures are value types.
Structures do not support inheritance.
Structures cannot declare a default constructor.
Based on the above discussion, let's rewrite the previous example:
Example
using System;
using System.Text;
struct Books
{
private string title;
private string author;
private string subject;
private int book_id;
public void setValues(string t, string a, string s, int id)
{
title = t;
author = a;
subject = s;
book_id = id;
}
public void display()
{
Console.WriteLine("Title : {0}", title);
Console.WriteLine("Author : {0}", author);
Console.WriteLine("Subject : {0}", subject);
Console.WriteLine("Book_id :{0}", book_id);
}
};
public class testStructure
{
public static void Main(string[] args)
{
Books Book1 = new Books(); /* Declare Book1 of type Books */
Books Book2 = new Books(); /* Declare Book2 of type Books */
/* book 1 specification */
Book1.setValues("C Programming",
"Nuha Ali", "C Programming Tutorial", 6495407);
/* book 2 specification */
Book2.setValues("Telecom Billing",
"Zara Ali", "Telecom Billing Tutorial", 6495700);
/* Print Book1 info */
Book1.display();
/* Print Book2 info */
Book2.display();
Console.ReadKey();
}
}
When the above code is compiled and executed, it produces the following result:
Title : C Programming
Author : Nuha Ali
Subject : C Programming Tutorial
Book_id : 6495407
Title : Telecom Billing
Author : Zara Ali
Subject : Telecom Billing Tutorial
Book_id : 6495700