C#结构和类的不同点有哪些

发布时间:2021-09-15 06:52:36 作者:chen
来源:亿速云 阅读:132

这篇文章主要讲解了“C#结构和类的不同点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#结构和类的不同点有哪些”吧!

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

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

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

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

C#结构实例:

struct Student : IGrade   public int maths;  public int english;  public int csharp;   public int GetTot()      {  return maths+english+csharp;      }       public Student(int y)  {  maths = english = csharp = y;   }  }      public string GetGrade()   {  if(GetTot() > 240 )   return "Brilliant";  if(GetTot() > 140 )  return "Passed";  return "Failed";   }  }  interface IGrade  {      string GetGrade();  }

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

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

C#结构示例之输出:

0  Failed

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

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

Student s2;  s2.maths = s2.english = s2.csharp = 50;  Console.WriteLine(s2.GetTot());  Console.WriteLine(s2.GetGrade());

C#结构示例之输出:

150  Passed

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

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

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

C#结构示例之输出:

270  Brilliant

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

感谢各位的阅读,以上就是“C#结构和类的不同点有哪些”的内容了,经过本文的学习后,相信大家对C#结构和类的不同点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 结构和类的区别及结构的使用
  2. C#类与结构再次详解

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:MySQL动态hash结构常用的实现方式

下一篇:zabbix监控nginx的配置

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》