灵活使用struct实现简单结构化数据的存储
2010-11-22 12:16
483 查看
struct类型是一种值类型,通常用来封装小型的相关变量组,例如颜色,点等。
结构还可以包含 构造函数、 常量、 字段(private,public,但是不能是protected)、 方法、 属性、 索引器、 运算符、 事件和 嵌套类型,但如果同时需要上述几种成员,则应当考虑改为使用类作为类型。 结构可以实现接口,但它们无法继承另一个结构。因此,结构成员无法声明为 protected。
结构与类共享大多数相同的语法,但结构比类受到的限制更多:
在结构声明中,除非字段被声明为 const 或 static,否则无法初始化。
结构不能声明默认构造函数(没有参数的构造函数)或析构函数。
结构体是在栈Stack中分配的,而类是在堆Heap中分配的,并且有内存回收机制自动的管理。
结构在赋值时进行复制。将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。在使用值类型的集合(如 Dictionary<string, myStruct>)时,请务必记住这一点。
结构是值类型,而类是引用类型。
与类不同,结构的实例化可以不使用 new 运算符。
在MSDN中(看看下面一个例子)是可以使用new来初始化结构体,同时可以先声明一个结构体,然后在一一的初始化结构体的值。
结构可以声明带参数的构造函数。
一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自 System.Object。
结构可以实现接口。
结构可用作可以为 null 的类型,因而可向其赋 null 值。
在结构体中我们如何来声明一个方法,然后有是如何工作的呢?
那么我们声明什么时候使用类,什么时候使用结构呢?
一般来说,值类型的适合于数据存储,而引用类型的更加适合于定义应用程序的行为。如果你有很多的数据,但是结构并不复杂,永远不可能有子类,那么结构是一个不错的选择。
结构还可以包含 构造函数、 常量、 字段(private,public,但是不能是protected)、 方法、 属性、 索引器、 运算符、 事件和 嵌套类型,但如果同时需要上述几种成员,则应当考虑改为使用类作为类型。 结构可以实现接口,但它们无法继承另一个结构。因此,结构成员无法声明为 protected。
结构与类共享大多数相同的语法,但结构比类受到的限制更多:
在结构声明中,除非字段被声明为 const 或 static,否则无法初始化。
结构不能声明默认构造函数(没有参数的构造函数)或析构函数。
结构体是在栈Stack中分配的,而类是在堆Heap中分配的,并且有内存回收机制自动的管理。
结构在赋值时进行复制。将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。在使用值类型的集合(如 Dictionary<string, myStruct>)时,请务必记住这一点。
结构是值类型,而类是引用类型。
与类不同,结构的实例化可以不使用 new 运算符。
在MSDN中(看看下面一个例子)是可以使用new来初始化结构体,同时可以先声明一个结构体,然后在一一的初始化结构体的值。
public struct CoOrds { public int x, y; public CoOrds(int p1, int p2) { x = p1; y = p2; } }
// Declare and initialize struct objects. class TestCoOrds { static void Main() { // Initialize: CoOrds coords1 = new CoOrds(); CoOrds coords2 = new CoOrds(10, 10); // Display results: Console.Write("CoOrds 1: "); Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y); Console.Write("CoOrds 2: "); Console.WriteLine("x = {0}, y = {1}", coords2.x, coords2.y); // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } /* Output: CoOrds 1: x = 0, y = 0 CoOrds 2: x = 10, y = 10 */
结构可以声明带参数的构造函数。
一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自 System.Object。
结构可以实现接口。
结构可用作可以为 null 的类型,因而可向其赋 null 值。
在结构体中我们如何来声明一个方法,然后有是如何工作的呢?
// struct1.cs using System; struct SimpleStruct { private int xval; public int X { get { return xval; } set { if (value < 100) xval = value; } } public void DisplayX() { Console.WriteLine("The stored value is: {0}", xval); } } class TestClass { public static void Main() { SimpleStruct ss = new SimpleStruct(); ss.X = 5; ss.DisplayX(); } }
那么我们声明什么时候使用类,什么时候使用结构呢?
一般来说,值类型的适合于数据存储,而引用类型的更加适合于定义应用程序的行为。如果你有很多的数据,但是结构并不复杂,永远不可能有子类,那么结构是一个不错的选择。
相关文章推荐
- Python使用shelve模块实现简单数据存储的方法
- Python使用shelve模块实现简单数据存储的方法
- Core Data持久化数据存储(2)-使用Core Data实现简单ShoppingCart应用程序
- iOS 6 编程--Core Data持久化数据存储(2)-使用Core Data实现简单ShoppingCart应用程序
- 使用SQLite存储和查询数据的简单实现(源代码+注释)
- 使用IMP导出数据备份并简单FTP实现异地存储
- 使用json数据实现简单的三级联动
- 使用Enumerable模块实现简单的测试框架并进行数据统计
- 使用Python3 xlrd pymysql 实现读取Excel数据读取以及mysql存储
- [原创] 不仅拥有XmlDocument一样简单的XML操作方法,并且实现数据文件安全存储功能——XmlEDocument
- 使用 AJAX,局部刷新 GridView 进行数据绑定的简单实现
- 不仅拥有XmlDocument一样简单的XML操作方法,并且实现数据文件安全存储功能——XmlEDocument
- 使用Redis的脚本功能实现Redis中数据简单查询
- 原生SQLite数据存储简单使用
- 九宫格 Swift提供经典的数组和字典两种集合类型来存储集合数据,使用数组实现一个九宫格程序,
- 使用Requests+xpath实现简单的数据爬取
- Scrapy框架学习 - 使用Twisted框架实现异步存储数据到MySQL数据库中
- Android 数据存储 利用SQLiteDatabase实现简单的学生管理
- 使用storyboard实现页面跳转,简单的数据传递
- Flashtext 使用文档 大规模数据清洗的利器-实现文本结构化