关于C#结构的一些认识

开发 后端
关于C#结构的一些认识向你介绍了关于C#结构的特点和示例等等方面的内容。

C#结构了解之前的话:在C++语言里面结构struct和类在许多方面都是相近的,只不过在存取方式上存在差别。但是,在C#下结构和类有着明显的不同点:

1、C#结构是堆栈对象,不能在堆上创建它;

2、C#结构可以继承接口,但是不能继承自其它结构;

3、不能重写结构的默认构造函数,需要自定义构造函数时必须创建附带参数的构造函数,以保证和默认构造函数的参数列表有所区别;

4、当使用new来创建结构对象时其构造函数自动被调用,若仅是像声明一个int类型的变量那样声明一个结构类型的变量而不new的话,那么结构中成员变量必须被初始化后才能使用该结构对象。

C#结构实例:

  1. struct Student : IGrade  
  2.  
  3. public int maths;  
  4. public int english;  
  5. public int csharp;  
  6.  
  7. public int GetTot()  
  8.     {  
  9. return maths+english+csharp;  
  10.     }  
  11.  
  12.     public Student(int y)  
  13. {  
  14. maths = english = csharp = y;  
  15.  }  
  16. }  
  17.     public string GetGrade()  
  18.  {  
  19. if(GetTot() > 240 )  
  20.  return "Brilliant";  
  21. if(GetTot() > 140 )  
  22. return "Passed";  
  23. return "Failed";  
  24.  }  
  25. }  
  26. interface IGrade  
  27. {  
  28.     string GetGrade();  

接下来看看怎么使用刚才创建的C#结构,代码如下:

  1. Student s1 = new Student();  
  2. Console.WriteLine(s1.GetTot());  
  3. Console.WriteLine(s1.GetGrade()); 

C#结构示例之输出:

  1. 0  
  2. Failed 

上述代码显示默认的构造函数被调用,构造函数将所有结构中的int成员变量都自动初始化为0,这就是为何合计为0的原因。

下面来看一段有意思的代码:

  1. Student s2;  
  2. s2.maths = s2.english = s2.csharp = 50;  
  3. Console.WriteLine(s2.GetTot());  
  4. Console.WriteLine(s2.GetGrade()); 

C#结构示例之输出:

  1. 150  
  2. Passed 

上述代码我们没有使用new来创建结构,所以构造函数不会被调用,仅是声明一个结构类型的变量s2,但是紧接着我们为结构的所有成员变量进行初始化赋值,那么结构照样可以使用。尽管很多人都在争论,认为这种赋值伎俩太不专业且显得有点傻,然而谁也无法找到合情合理的解释,但是这样做的确可行。当我们注释掉赋值语句后,编译器则会报错:使用了未赋值的本地变量s2。

我们还可以使用自定义构造函数并传递一个整型变量来创建结构对象,代码如下:

  1. Student s3 = new Student(90);  
  2. Console.WriteLine(s3.GetTot());  
  3. Console.WriteLine(s3.GetGrade()); 

C#结构示例之输出:

  1. 270  
  2. Brilliant 

不像类是引用类型,结构是值类型的,所以结构比类操作起来更简单。当使用类仅存储一些数据时,你会发现使用结构会好得多!结构化数组是在堆上创建的,而以一个一个类的形式来创建对象,则必须提前在堆上分配内存,而且每个类的引用地址也需要额外保存起来,所以使用结构化数组则更加的有效率。实际上在.Net框架里大部分类也都是结构,譬如:System.Drawing.Point。

关于C#结构的相关内容就向你介绍到这里,希望对你学习C#结构有所帮助。

【编辑推荐】

  1. C#的结构体使用实例浅析
  2. C#结构体变量学习浅谈
  3. 解析C#结构体指针
  4. C#指针使用简析
  5. C#结构学习的详细介绍
责任编辑:仲衡 来源: 互联网转载
相关推荐

2019-10-30 14:58:45

MVCAndroid表现层

2022-01-12 08:30:55

结构体指针STM32

2009-07-30 18:49:31

C#时间类型

2019-11-18 14:27:01

虚拟化Intel VAMD SVM

2009-08-12 11:20:51

C#运算符重载

2009-08-06 16:01:30

C#接口成员

2011-07-13 09:13:56

Android设计

2009-08-19 16:59:25

C# 操作符

2009-08-13 09:49:16

C#关键字

2013-04-07 10:40:55

前端框架前端

2009-06-18 09:51:25

Java继承

2012-09-25 10:03:56

JavaJava封面Java开发

2009-08-12 17:08:06

C#远程计算机

2011-03-11 09:27:11

Java性能监控

2012-04-19 10:06:55

微软Windows 8 E

2009-06-04 16:28:43

EJB常见问题

2015-12-04 10:04:53

2017-12-21 07:54:07

2022-04-14 10:22:44

故事卡业务

2020-09-28 06:45:42

故障复盘修复
点赞
收藏

51CTO技术栈公众号