C#结构的学习 分类: C# 2013-01-10 17:18 456人阅读 评论(0) 收藏
2013-01-10 17:18
453 查看
结构是程序员定义的数据类型,非常的类似于类。有数据成员和函数成员。
但是也有区别:
1)类是引用类型,而结构是值类型;
2)结构是隐式密封的,不能被派生;
语法声明与类相似:
看下边的示例代码来演示C#结构的使用方法:
1)结构类型的变量不能使null;
2)两个结构变量不能引用同一对象
在Main()分别对它们实例化声明两个个变量后,cs1和cs2分别指向在堆中的引用,而ss1和ss2分别在栈中分配空间并存储。
把一个结构赋值给另外一个结构,就是从一个结构中把值复值给另外一个结构。与类不同的是,复制类变量时只有引用被复制。
如上面的代码,类赋值结束后,cs2和cs1指向堆中的同一个对象。但是在结构赋值结束后,ss2成员的值和ss1成员的值相同。
结构中的构造函数和析构函数
语言隐式的为每个结构提供一个无参数的构造函数。这个构造函数把结构的每个成员设置为该类型的默认值,引用成员被设置成null
预定义的无参数构造函数对每个结构都存在,而且不能删除或者重新定义。但是可以创建另外的构造函数,只要他们有参数。这和类不同,对于类,编译器只在没有其它构造函数声明时提供隐式的无参数构造函数。
要调用一个构造函数,包括隐式的无参数构造函数,要使用new运算符。即使不从堆中分配内存也使用new运算符。
如下面的实例:
1)不能使用数据成员的值,直到显示的设置它
2)不能调用任何函数成员,直到所有数据成员已经被赋值
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。
![](http://service.t.sina.com.cn/widget/qmd/1770922665/f729d6d3/1.png)
![](http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_02.png)
但是也有区别:
1)类是引用类型,而结构是值类型;
2)结构是隐式密封的,不能被派生;
语法声明与类相似:
//结构的声明 struct StructName { //包含的成员变量 }
看下边的示例代码来演示C#结构的使用方法:
static void Main(string[] args) { Point first, second, third; first.x = 10; first.y = 10; second.x = 20; second.y = 20; third.x = first.x + second.x; third.y = first.y + second.y; Console.WriteLine("first:{0},{1}",first.x,first.y); Console.WriteLine("second:{0},{1}",second.x,second.y); Console.WriteLine("third:{0},{1}",third.x,third.y); Console.ReadKey(); } struct Point { public int x; public int y; }结构是值类型
1)结构类型的变量不能使null;
2)两个结构变量不能引用同一对象
static void Main(string[] args) { CSimple cs1 = new CSimple(),cs2=null; Simple ss1 = new Simple(),ss2=new Simple(); cs1.x = ss1.x = 5; cs1.y = ss1.y = 10; cs2 = cs1; //赋值类实例 ss2 = ss1; //赋值结构实例 } class CSimple { public int x; public int y; } struct Simple { public int x; public int y; }先创建一个CSimple类,和一个Simple结构
在Main()分别对它们实例化声明两个个变量后,cs1和cs2分别指向在堆中的引用,而ss1和ss2分别在栈中分配空间并存储。
把一个结构赋值给另外一个结构,就是从一个结构中把值复值给另外一个结构。与类不同的是,复制类变量时只有引用被复制。
如上面的代码,类赋值结束后,cs2和cs1指向堆中的同一个对象。但是在结构赋值结束后,ss2成员的值和ss1成员的值相同。
结构中的构造函数和析构函数
语言隐式的为每个结构提供一个无参数的构造函数。这个构造函数把结构的每个成员设置为该类型的默认值,引用成员被设置成null
预定义的无参数构造函数对每个结构都存在,而且不能删除或者重新定义。但是可以创建另外的构造函数,只要他们有参数。这和类不同,对于类,编译器只在没有其它构造函数声明时提供隐式的无参数构造函数。
要调用一个构造函数,包括隐式的无参数构造函数,要使用new运算符。即使不从堆中分配内存也使用new运算符。
如下面的实例:
static void Main(string[] args) { Simple s1 = new Simple(); //调用隐式的构造函数 Simple s2 = new Simple(5, 10); //调用构造函数 Console.WriteLine("{0},{1}",s1.x,s1.y); Console.WriteLine("{0},{1}", s2.x, s2.y); Console.ReadKey(); } struct Simple { public int x; public int y; public Simple(int a, int b) { x = a; y = b; } }也可以不适用new运算符创建结构的实例。但是,有一些限制:
1)不能使用数据成员的值,直到显示的设置它
2)不能调用任何函数成员,直到所有数据成员已经被赋值
static void Main(string[] args) { Simple s1, s2; Console.WriteLine("{0},{1}", s1.x, s1.y);//编译错误,s1.x, s1.y还没有被赋值 s2.x = 50; s2.y = 10; Console.WriteLine("{0},{1}", s2.x, s2.y); Console.ReadKey(); } struct Simple { public int x; public int y; }
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。
![](http://service.t.sina.com.cn/widget/qmd/1770922665/f729d6d3/1.png)
![](http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_02.png)
相关文章推荐
- sorted()排序详解 分类: python基础学习 python Module 2013-09-04 17:18 1372人阅读 评论(0) 收藏
- 【C#小知识】C#中一些易混淆概念总结(四)---------解析Console.WriteLine() 分类: C# 2014-02-05 17:18 1060人阅读 评论(0) 收藏
- fileinput模块 分类: python基础学习 python 小练习 python Module 2013-08-15 17:18 417人阅读 评论(0) 收藏
- C#函数的学习 分类: C# 2012-05-14 00:51 567人阅读 评论(0) 收藏
- C#形参,实参,值传递参数,引用传递参数,输出参数,参数数组的学习(一) 分类: C# 2012-11-01 22:12 620人阅读 评论(0) 收藏
- 笔记-广达服务器时碰到的一些问题的 分类: 服务器等硬件学习 2014-08-25 17:18 479人阅读 评论(0) 收藏
- 以lambda形式优化结构 分类: python 小练习 divide into python python基础学习 2013-12-30 21:07 279人阅读 评论(0) 收藏
- TortoiseSVN常用批处理命令 分类: C# 2014-08-09 11:31 647人阅读 评论(1) 收藏
- 架构师速成4.2-幼儿园要学会如何高效学习 分类: 架构师速成 2015-06-24 09:10 409人阅读 评论(2) 收藏
- opnet的simple_source模块学习 分类: opnet 2014-05-18 09:50 170人阅读 评论(0) 收藏
- 2015-03 月份学习总结 分类: 学习总结 2015-04-01 20:25 87人阅读 评论(0) 收藏
- 代码对齐 分类: C#小技巧 2014-04-17 14:45 166人阅读 评论(0) 收藏
- 依次读取文件中的一个字符 分类: python基础学习 python 小练习 2013-08-22 11:14 289人阅读 评论(0) 收藏
- This application failed to start because it could not find or load the Qt platform plugin “... 分类: QT学习实践 2015-05-17 18:21 44人阅读 评论(0) 收藏
- 批量生成字典、列表 分类: python基础学习 python 2013-07-22 14:24 328人阅读 评论(0) 收藏
- 变量及地址 分类: python基础学习 2013-06-15 15:32 190人阅读 评论(0) 收藏
- C# IIS应用程序池辅助类 分类: C# Helper 2014-07-19 09:50 248人阅读 评论(0) 收藏
- 使用生成器返回fibs列表 分类: python Module python基础学习 2013-10-28 18:19 283人阅读 评论(0) 收藏
- Python的静态方法和类成员方法 分类: python学习 2015-05-07 19:45 40人阅读 评论(0) 收藏
- 树-堆结构练习——合并果子之哈夫曼树 分类: 树 2015-06-18 17:23 18人阅读 评论(0) 收藏