结构体

来源:互联网 发布:郑州淘宝诈骗 编辑:程序博客网 时间:2024/04/30 00:26

C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员。

    public struct AddressBook

    {

       //字段、属性、方法、事件

    }

一、结构的多态性和继承性

结构直接派生自System.ValueType,间接派生自System.Object,但结构是隐式密封的,不能作为基类在派生出其他的结构,也不能从类派生,但可以从接口派生

结构的特性:

1、结构类型总是隐式密封的,因此在定义结构时不能使用sealed和abstract关键字;

2、因为结构不能作为基类,结构的成员不能使用如下访问修饰符:protected和protected,internal;

3、结构的函数成员不能声明为abstract和virtual,但是可以使用override关键字,用以覆写它的基类System.ValueType中的方法。

二、结构体构造函数

结构类型可以有实例构造函数和静态构造函数,但不能有析构函数

实例构造函数

结构类型都有一个预定义的,没有参数的构造函数,这点与类是一样的。此构造函数不允许删除和重定义,并且这个无参数的构造函数会一直存在,并不会因为定义了其他带参数的构造函数就消失,这一点和类不同。

注意如果没有使用new运算符,是不可以使用数据成员的值(除非已显示地设置了该数据成员的值)和调用函数成员的(除非所有数据成员均已经被赋值)。

三、结构体静态构造函数

和类一样,结构类型也可以有静态构造函数,静态构造函数用于初始化静态数据成员。静态构造函数有如下特点:

1、静态构造函数不能有访问修饰符和参数

2、静态构造函数不能访问实例成员;

3、静态构造函数无法直接进行调用;

结构和类的静态构造函数的触发规则不同,类的静态构造函数是在创建第一个实例或引用任何静态成员之前自动调用的,而结构的静态构造函数在以下情况调用:

1、使用显式声明的构造函数进行初始化

2、调用结构的方法或访问结构的静态数据成员(无论是读取还是赋值,访问实例数据成员不会触发CLR自动调用静态的构造函数)。

using UnityEngine;

using System.Collections;

public struct MyTest

{

         public staticint _num =10;

         public int_data;

         staticMyTest()

         {

                   _num=4;

         }

}

public class structTest2 : MonoBehaviour {

 

 

         void Start (){

                   print(MyTest._num);

         }

}

四、结构体和类的区别对比图


五、结构和类的适用场合分析:

1、当堆栈的空间很有限,且有大量的逻辑对象时,创建类要比创建结构好一些;

2、对于点、矩形和颜色这样的轻量对象,假如要声明一个含有许多个颜色对象的数组,则CLR需要为每个对象分配内存,在这种情况下,使用结构的成本较低;

3、在表现抽象和多级别的对象层次时,类是最好的选择,因为结构不支持继承。

4、大多数情况下,目标类型只是含有一些数据,或者以数据为主

0 0
原创粉丝点击