类和结构有什么区别?类是一种数据结构,类也是结构???
* 1. 结构体与类的区别:
* a. 从语法上的区别.
* 1).类使用class关键字声明,结构体使用struct关键字声明
* 2).可以为结构体声明字段,但是在声明字段的同时不能为其赋默认值
*
* 3).属性与类中的属性一样,用来保护字段的,这个和类中的属性没有区别.
* 4).方法同样的表示1个功能,与类中的方法没有任何区别.
*
* 5).无参数的构造函数无论如何都会被C#编译器自动生成,所以不允许程序员为结构体写1个无参数的构造函数
* 6).要求在结构体的构造函数中,必须要为当前结构体对象的每1个字段赋值.
* b. 创建对象
* 在创建结构体对象的时候,可以像类那样使用new关键字来创建. 也可以不使用new关键字创建.
* 通过new关键字创建对象以后,这个对象的每1个字段就已经有值了.那么我们就可以直接的使用.
* 因为通过new关键字创建对象,调用了构造函数.而在构造函数中又必须要为每1个字段赋值.
* 我们可以猜出,无参数的构造函数中做的事情: 为值类型的字段赋值0 为引用类型的字段赋值null
*
* 如果不使用new关键字来创建对象,那么这个结构体对象的字段是没有值的,要求在使用字段的值之前必须为字段赋值.
* 因为这种方式创建结构体对象没有调用构造函数,而在声明字段的时候又不允许赋值. 所以这样创建对象字段是没有值的.
*
* 2. 结构体与类本质上的区别
* a. 结构体是1个值类型,类是引用类型
* b. 结构体的变量本身就是1个对象,其中不像类那样存储地址. 真正的结构体对象直接存储在这个结构体的变量中.
* 结构体对象的成员直接存在结构体变量中,
* 在声明结构体变量的时候, 其实就已经在结构体变量中创建好对象了.
* new关键字仅仅调用构造函数.
* c. 结构体相互赋值的时候,是逐个拷贝字段的值.
*
* 3. 什么时候使用结构体.
* a. 栈空间比较小,但是访问速度较快; 堆空间比较大,但是访问速度较慢
* b. 结构体对象是分配在栈空间中,所以结构体对象的访问速度比堆空间中的类的对象要块.
* c. 当我们要表示1个轻量级对象的时候,其中的成员较少.就可以将其声明为结构体,
* 这个时候访问速度较块.
* 重量级对象当成员比较多的时候,就声明为类,让对象分配在堆空间中.
给你后半句做一个肯定,就是给你的解释
是我提的问题有问题吗??!!!
@hoofin: 类就是一种数据结构,当然没问题
@hoofin: 我想问一个问题1:什么是数据结构2:什么是结构体,3:什么是数据类型4:为什么类就不是数据结构?,楼主可以想想
类 结构
引用类型 值类型
一般需要封装有属性 一般公开字段无属性
有默认构造函数 无默认构造函数
new时字段可以不完全初始化 必须完全初始化
必须new 可以不new
类中可以为字段赋值 结构中不可以
类值放在栈中 值放在堆中
可以被继承 不可以被继承
都可以写方法 都可以有构造函数 ...
类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存
类有构造和析构函数
类可以继承和被继承
结构:
结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。
结构没有构造函数,但可以添加。结构没有析构函数
结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口
简单来讲,类是引用类型,存在堆上,结构是值类型,存在栈上
在C#一般项目中,除了p/invoke 会用到结构之外,其他一般只用类。