c#结构体struct

文章详细介绍了结构体和类在C#中的创建方法和使用,结构体作为值类型存储在栈中,复制时进行内容复制,而类作为引用类型存储在堆中,复制时仅复制引用。结构体可以通过不使用new关键字直接实例化或使用new关键字配合方法初始化。类则通常用于需要深复制或初始化赋值的情况。适用场合方面,结构体适合数据简单、复制频繁的场景,而类在堆栈空间有限或需要复杂逻辑时更优。
摘要由CSDN通过智能技术生成


结构体&类

感觉自己对于结构体的使用场景没有特别清晰,所以学习记录一下。


一、结构体的创建方法

结构体:是一个值类型的数据,存储在栈空间中,复制过程中是进行内容复制,复制后两个变量指向的地址不是同一个,不能对字段或属性赋初始值;
:是引用类型,存放在堆空间中的(在栈中保存的是指向堆中数据对象的引用),在复制时只会对其引用进行复制也就是浅复制,所以复制前后的内容指向的都是同一个地址,可以对字段或属性赋初始值。

在复制的时候只会对栈空间的内容进行复制,引用类型如果需要进行深复制一般需要通过序列化及反序列的手段来达到深复制的目的;

二、结构体使用

结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据;
结构体有两种实例化方式:

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、需要对属性或字段进行初始化赋值的使用类;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值