结构体&类
感觉自己对于结构体的使用场景没有特别清晰,所以学习记录一下。
一、结构体的创建方法
结构体:是一个值类型的数据,存储在栈空间中,复制过程中是进行内容复制,复制后两个变量指向的地址不是同一个,不能对字段或属性赋初始值;
类:是引用类型,存放在堆空间中的(在栈中保存的是指向堆中数据对象的引用),在复制时只会对其引用进行复制也就是浅复制,所以复制前后的内容指向的都是同一个地址,可以对字段或属性赋初始值。
在复制的时候只会对栈空间的内容进行复制,引用类型如果需要进行深复制一般需要通过序列化及反序列的手段来达到深复制的目的;
二、结构体使用
结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据;
结构体有两种实例化方式:
1.不使用 new 实例化
可以在不使用 new 运算符的情况下对其进行实例化。 在这种情况下,在首次使用实例之前必须初始化所有实例字段如下:
//定义结构体
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};
public class testStructure
{
public static void Main(string[] args)
{
//不使用new关键字进行实例化
Books Book1; /* 声明 Book1,类型为 Books */
/* book 1 详述 */
Book1.title = "C Programming";
Book1.author = "Nuha Ali";
Book1.subject = "C Programming Tutorial";
Book1.book_id = 6495407;
/* 打印 Book1 信息 */
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);
Console.ReadKey();
}
}
2.使用new关键字进行实例化
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(); /* 声明 Book1,类型为 Books */
/* book 1 详述 */
Book1.setValues("C Programming",
"Nuha Ali", "C Programming Tutorial",6495407);
/* 打印 Book1 信息 */
Book1.display();
Console.ReadKey();
}
}
结构和类的适用场合分析
1、当堆栈的空间很有限,且有大量的逻辑对象时,创建类要比创建结构好一些;
2、对于数据结构较简单,复制频率不高(或需要对数据内容进行备份),保存时间不长的数据使用结构的成本较低;
3、需要对属性或字段进行初始化赋值的使用类;