zoukankan      html  css  js  c++  java
  • C#结构的学习 分类: C# 20130110 17:18 456人阅读 评论(0) 收藏

    结构是程序员定义的数据类型,非常的类似于类。有数据成员和函数成员。

    但是也有区别:

    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;
            }


    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    c读取文本文档
    java类中定义接口
    android selector
    android listview
    android继承Dialog实现自定义对话框
    移植net-snmp到开发板(mini210)
    [BZOJ1901]Zju2112 Dynamic Rankings
    [BZOJ3524][Poi2014]Couriers
    [codeforces722D]Generating Sets
    [codeforces722C]Destroying Array
  • 原文地址:https://www.cnblogs.com/yisuowushinian/p/4715638.html
Copyright © 2011-2022 走看看