当前位置:编程学习 > C#> 正文

结构、枚举和数组的区别

时间:2013-7-25类别:编程学习

结构、枚举和数组的区别

结构、枚举和数组的区别

一、结构

1、定义:结构是一种值类型,并且不需要堆分配。结构的实例化可以不使用new运算符。如果声明一个10000个Point对象组成的数组,为了引用每个对象,则需分配更多内存;这种情况下,使用结构可以节约资源。结构是使用 struct关键字定义的,与类相似,都表示可以包含数据成员和函数成员的数据结构。结构的实例化可以不使用new运算符。

2、结构是值类型:结构类型的变量不能为null;两个结构变量不能引用同一对象

3、结果的举例

 

  •  
  • C# 代码   复制
  •     struct A
        {
            public int x;           //不能直接对其进行赋值
            public int y;
            public static string str = null;   //静态变量可以初始化
            public A(int x,int y)   //带参数的构造函数
            {
                this.x = x;
                this.y = y;
                Console.WriteLine("x={0},y={1},str={2}", x, y,str);
            }
    
        }
        class Program
        {
            static void Main(string[] args)
            {
                A a =new A(1,2);
                A a1 = a;
                a.x =10;
                Console.WriteLine("a1.x={0}",a1.x);
                Console.Read();
            }
        }
    		
  •  

    4、构造函数(实例、静态) 但不允许有析构函数


    实例构造函数:语言隐式地为每个结构提供一个无参数的构造函数,成员为默认值;
    它不能删除和重定义,但可以另外创建,只要它没有参数;调用时,都要使用new运算符


    Simple si = new Simple();
    Simple s2 = new Simple (5,10);


    也可不使用new创建结,但有限制:不能使用数据成员的值,直到显示的设置它
    不能调用任何函数成员,直到所有数据成员已经被赋值


    Simple s1,s2;
    Console.write(s1.x); //编译错误
    S2.x = 5;s2.y=10;
    Console.write(s2.x); //成功


    5、静态构造函数:和类的一样;


    在下面两个行为的第一个之前被调用:调用显示声明的构造函数;对结构静态成员的引用


    6、结构是隐式密封的,不能派生其它结构,不支持继承


    不能用于结构的修饰符有:protected、internal、abstract、virtual
    结构本身派生自 System.ValueType,System.ValueType派生 object
     

    7、附加信息:结构可以声明partial结构;


    实际上在.NET中预定义简单类型(int、short、long) 都被实现为结构;它可实现接口;

     

    、枚举

    1、枚举类型是派生自System.Enum的一种独特的值类型,用于声明一组命名的常数。每种枚举类型均有一种基础类型,此基础类型可以使除char类型以外的任何整型。 枚举元素的默认基础类型为int 默认情况下,第一个枚举元素的值为0,后面每个枚举元素的值依次递增1 。

    2、枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。例如,假设您必须定义一个变量,该变量的值表示一周中的一天。该变量只能存储七个有意义的值。若要定义这些值,可以使用枚举类型。

     

    3、格式:

    访问修辞符 enum 枚举名:基础类型

    {

        枚举成员

     }

     
    4、实例

     

  • C# 代码   复制
  • enum Days2
    {
        None = 0x0,
        Sunday = 0x1,
        Monday = 0x2,
        Tuesday = 0x4,
        Wednesday = 0x8,
        Thursday = 0x10,
        Friday = 0x20,
        Saturday = 0x40
    }
    class MyClass
    {
        Days2 meetingDays = Days2.Tuesday | Days2.Thursday;
    }
    
    			
  •    

    三、数组

    1、数组是包含若干相同类型元素的一组变量。这些变量都可以通过索引进行访问。数组中的变量称为数组的元素。数组能够容纳元素的数量称为数组的长度。数组的维数即数组的秩。数组中的每个元素都具有唯一的索引与其相对应。数组的索引从零开始。

    2、数组是对象:数组实例是从System.Array继承的对象;数组是引用类型;根据数组元素类型有:值类型数组和引用类型数组

    3、一维数组和矩形数组:

    声明: int [,,] arr; 不允许维度长度 实例化:int [,,] arr = new int[3,4,5];

    显示类型数组:

    int [] intarr = new int[] {10,20,30,40}; int [] intarr = {10,20,30,40};

    int [,] intarr = new int[,] {{10,1},{2,4},{3,4}}; int [,] intarr = {{10,1},{2,4},{3,4}};

    逗号用作元素和分组之间的分隔符; 逗号不在左或右花括号之间使用; 最后一个为”元素“,其它为”分组“

    隐式类型数组

    string[] sArr = new string[] {“ad”,”bd”}; var sArr = new [] {“ad”,”bd”};

    4、交叉数组

    声明:int arr[][]; 实例化:int arr[][] = new int[3][,];

    arr[0]= new int[,] {{1,2}, {100,200} }; arr[1]= new int[,] {{4,5,6}, {40,50,60} }; arr[2]= new int[,] {{8,9,10,11},{11,22,33,44}};

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐