C#结构了解之前的话:在C++语言里面结构struct和类在许多方面都是相近的,只不过在存取方式上存在差别。但是,在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#结构有所帮助。
【编辑推荐】
当前题目:关于C#结构的一些认识
本文链接:http://www.shufengxianlan.com/qtweb/news14/232564.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联