A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小石 黑马帝   /  2011-11-5 15:11  /  3139 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class是类,是引用类型,可以继承类和接口,struct是值类型,不支持类的继承。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 小石 于 2011-11-19 18:43 编辑

详细点的 谢谢

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

8 个回复

倒序浏览
class是面向对象编辑中的基本概念.是一种自定义数据结构类型,通常包含字段,属性,方法,构造函数,索引器等
所有类都承自Object类,是一种引用类型.
struct是一种值类型,所有的结构都继承自System.ValueType类.
他们之间有相同点也有不同点,相同点在于,他们的声明语法很相似
不同在于:
类型:一个是值类型,一个是引用类型.
从两者的功能看:class表现为行为,Struct常用于存储数据
class可以继承自其他类和接口,Struct 只支持接口继承
class有析构函数,而Struct没有
在实例化时,class使用new,而Struct在声明时就可完成初始化.
暂时想到这么多...

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
类是引用类型,结构是值类型,所有的类直接或间接继承自Object类,而结构都继承自System.ValueType类。
结构是天生封闭的,也就是不能被继承,结构也不能继承其它类,只能继承接口。
类可以显式定义无参的构造器,而结构则不可以,因为编译器会自动为结构生成一个无参的构造器。
如果类中没有显式定义无参构造器,而定义了有参构造器,则该类是没有无参构造器的,而结构则存在,因为编译器器结构自动生成无参构造器
类可以定义析构器但是结构不可以
类使用前必须new关键字实例化,结构不需要
类的构造器不需要初始化全部字段,结构的构造器必须初始化所有字段

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
我只记住一点:

class  是引用类型的--------是和 string , 接口 , 抽象类,等是一个阵营的,

struct 是值类型的----------是和 int, long, enum, bool 等是一个阵营的,

记住了这两点区别,其他的异同点都可以记住了

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
class 默认是私有的
struct是共有的,安全级别不一样

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
周大俊 黑马帝 2011-11-15 15:04:49
7#
1.class 是引用类型,struct是值类型.
    class生成的对象可以为null,但是struct则不可。
2.class产生的对象位于内存的堆上,而struct位于内存的栈上。
3.将class作为参数传给一个方法时,传递的是一个引用。struct传递的是值。
4.类使用前必须new关键字实例化,Struct不需要。
5.Class比较适合大的和复杂的数据,Struct适用于作为经常使用的一些数据组合成的新类型。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
毕山山 黑马帝 2011-11-16 16:24:48
8#
结构和类具有大体的语法,但是结构受到的限制比类要多.
1  结构不能申明有默认的构造函数,为结构的副本是由编译器创建和销毁的,所以不需要默认的构造函数和析构函数.
2  结构是值类型,所以对结构变量所做的改变不会影响其的原值,而类是引用类型,改变其变量的值会改变其原值.
3  申明结构用Struck关键字,申明类用class关键字,向方法传递结构是时是通过值传递的,而不是通过引用,与类不同.
4  结构的实例化可以不使用New关键字.类的实例化要使用new关键字.
5  结构可以实现接口,但是不能继承类,也不能被继承,类可以单根继承也可以实现接口.

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
张涛 黑马帝 2011-12-31 14:41:47
9#
.NET中class和struct的区别

1、引言

  提起class和struct,我们首先的感觉是语法几乎相同,待遇却天壤之别。历史将接力棒由面向过程编程传到面向对象编程,class和struct也背负着各自的命运前行。在我认为,struct英雄迟暮,class天下独行,最本质的区别是class是引用类型,而struct是值类型,它们在内存中的分配情况有所区别。由此产生的一系列差异性,本文将做以全面讨论。

  2、基本概念

  2.1、什么是class?

  class(类)是面向对象编程的基本概念,是一种自定义数据结构类型,通常包含字段、属性、方法、属性、构造函数、索引器、操作符等。因为是基本的概念,所以不必在此详细描述,读者可以查询相关概念了解。我们重点强调的是.NET中,所有的类都最终继承自System.Object类,因此是一种引用类型,也就是说,new一个类的实例时,对象保存了该实例实际数据的引用地址,而对象的值保存在托管堆(managed heap)中。

  2.2、什么是struct?

  struct(结构)是一种值类型,用于将一组相关的信息变量组织为一个单一的变量实体 。所有的结构都继承自System.ValueType类,因此是一种值类型,也就是说,struct实例分配在线程的堆栈(stack)上,它本身存储了值,而不包含指向该值的指针。所以在使用struct时,我们可以将其当作int、char这样的基本类型类对待。

  3、相同点,不同点

  相同点:语法类似。

  不同点:

  ◆class是引用类型,继承自System.Object类; struct是值类型,继承自System.ValueType类,因此不具多态性。但是注意,System.ValueType是个引用类型。

  ◆从职能观点来看,class表现为行为; 而struct常用于存储数据。

  ◆class支持继承,可以继承自类和接口; 而struct没有继承性,struct不能从class继承,也不能作为class的基类,但struct支持接口继承。

◆class可以声明无参构造函数,可以声明析构函数; 而struct只能声明带参数构造函数,且不能声明析构函数。因此,struct没有自定义的默认无参构造函数,默认无参构造器只是简单地把所有值初始化为它们的0等价值。

  ◆实例化时,class要使用new关键字; 而struct可以不使用new关键字,struct在声明时就进行了初始化过程,所有的成员变量均默认为0或null。

  ◆class可以实抽象类(abstract),可以声明抽象函数; 而struct为抽象,也不能声明抽象函数。

  ◆class可以声明protected成员、virtual成员、sealed成员和override成员; 而struct不可以,但是值得注意的是,struct可以重载System.Object的3个虚方法,Equals()、ToString()和GetHashTable()。

  ◆class的对象复制分为浅拷贝和深拷贝,必须经过特别的方法来完成复制; 而struct创建的对象复制简单,可以直接以等号连接即可。

  ◆class实例由垃圾回收机制来保证内存的回收处理; 而struct变量使用完后立即自动解除内存分配。

  ◆作为参数传递时,class变量是以按址方式传递; 而struct变量是以按值方式传递的。

  我们可以简单的理解,class是一个可以动的机器,有行为,有多态,有继承; 而struct就是个零件箱,组合了不同结构的零件。其实,class和struct最本质的区别就在于class是引用类型,内存分配于托管堆; 而struct是值类型,内存分配于线程的堆栈上。由此差异,导致了上述所有的不同点,所以只有深刻的理解内存分配的相关内容,才能更好的驾驭。本系列将再以后的内容中,将引用类型和值类型做以深入的比较和探讨,敬请关注。当然正如本文标题描述的一样,使用class基本可以替代struct的任何场合,class后来居上。虽然在某些方面struct有性能方面的优势,但是在面向对象编程里,基本是class横行的天下。

  那么,有人不免会提出,既然class几乎可以完全替代struct来实现所有的功能,那么struct还有存在的必要吗?答案是,至少在以下情况下,鉴于性能上的考虑,我们应该考虑使用struct来代替class:

  ◆实现一个主要用于存储数据的结构时,可以考虑struct。

  ◆struct变量占有堆栈的空间,因此只适用于数据量相对小的场合。

  ◆结构数组具有更高的效率。

  ◆提供某些和非托管代码通信的兼容性。

  所有这些是struct有一席之地的理由,当然也许还有其他的更多说法,只是我不知道罢了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马