首页 新闻 会员 周边 捐助

c#关于类的问题

0
悬赏园豆:40 [已解决问题] 解决于 2015-09-24 08:57

类和结构有什么区别?类是一种数据结构,类也是结构???

hoofin的主页 hoofin | 初学一级 | 园豆:4
提问于:2015-09-23 14:39
< >
分享
最佳答案
1

* 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个轻量级对象的时候,其中的成员较少.就可以将其声明为结构体,
* 这个时候访问速度较块.
* 重量级对象当成员比较多的时候,就声明为类,让对象分配在堆空间中.

收获园豆:10
Wesleyzen | 菜鸟二级 |园豆:344 | 2015-09-23 15:32
其他回答(5)
0

给你后半句做一个肯定,就是给你的解释

收获园豆:10
稳稳的河 | 园豆:4216 (老鸟四级) | 2015-09-23 14:59

是我提的问题有问题吗??!!!

支持(0) 反对(0) hoofin | 园豆:4 (初学一级) | 2015-09-23 15:17

@hoofin: 类就是一种数据结构,当然没问题

支持(0) 反对(0) 稳稳的河 | 园豆:4216 (老鸟四级) | 2015-09-23 15:23

@hoofin: 我想问一个问题1:什么是数据结构2:什么是结构体,3:什么是数据类型4:为什么类就不是数据结构?,楼主可以想想

支持(0) 反对(0) 稳稳的河 | 园豆:4216 (老鸟四级) | 2015-09-23 16:36
0

类         结构
引用类型 值类型
一般需要封装有属性 一般公开字段无属性
有默认构造函数 无默认构造函数
new时字段可以不完全初始化 必须完全初始化
必须new 可以不new 
类中可以为字段赋值 结构中不可以
类值放在栈中 值放在堆中 
可以被继承 不可以被继承 

都可以写方法 都可以有构造函数 ...

收获园豆:5
雨之秋水 | 园豆:649 (小虾三级) | 2015-09-23 15:54
0

类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存

类有构造和析构函数

类可以继承和被继承

结构:

结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。

结构没有构造函数,但可以添加。结构没有析构函数

结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口

收获园豆:15
mysendmailservice | 园豆:165 (初学一级) | 2015-09-23 16:00
0

简单来讲,类是引用类型,存在堆上,结构是值类型,存在栈上

LanJerry | 园豆:168 (初学一级) | 2015-09-24 16:58
0

在C#一般项目中,除了p/invoke 会用到结构之外,其他一般只用类。

小小无厘头 | 园豆:195 (初学一级) | 2015-09-27 13:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册