• 灵活使用struct实现简单结构化数据的存储


      struct类型是一种值类型,通常用来封装小型的相关变量组,例如颜色,点等。

      结构还可以包含 构造函数常量字段(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 爬虫 解决escape问题
    python 爬虫 重复下载 二次请求
    iOS开发-消息通知机制(NSNotification和NSNotificationCenter)
    iOS开发-UITableView自定义Cell
    iOS开发-自定义UIAlterView(iOS 7)
    iOS开发-CocoaPods实战
    iOS开发-UICollectionView实现瀑布流
    iOS开发-UITabBarController详解
    iOS 开发-Certificate、App ID和Provisioning Profile之间的关系
    iOS开发-View中frame和bounds区别
  • 原文地址:https://www.cnblogs.com/pingjiang/p/1884011.html
Copyright © 2020-2023  润新知