黑马程序员技术交流社区

标题: c#中类与结构的区别 [打印本页]

作者: 七里香    时间: 2013-9-9 20:59
标题: c#中类与结构的区别
c#中类和结构在初学者看来都是差不多的,都有自己的字段,都能添加方法。那么既然有了结构为什么还会出现类呢?
结构的事例:
public struct SStudent
{
string stuName;
int age;
string sex;
public void sayHello()
{
Console.WriteLine("你好!");
}
}
类事例:
public class CStudent
{
string stuName;
int stuAge;
string stuSex;
public void sayHello()
{
Console.WriteLine("你好");
}
}
调用过程:
public class Test
{
static void Main(string[] args)
{
CStudent stuZs = new CStudent();//调用类
SStudent stuLi=new SStudent();//调用结构
}
}
从上面的例子中能看到类和结构非常的相似,只是struct和class有一些区别,而且使用时调用的方法都非常类似。那么难道微软无聊了弄个结构来玩玩?
(微软:我才没那么无聊呢!)。那么类和结构的区别是什么呢?
你问我?我也不知道╮(╯▽╰)╭。
那么我们可以去问一下无所不知无所不晓的度娘嘛。{:soso_e113:}
下面是百度说的(我手打的哦,亲,要不是为了技术分我才不打呢!):
类和结构的差别:
1.引用类型和值类型的差别。
  类是引用类型:引用类型在堆上分配地址。
   而结构是值类型:值类型在堆栈上分配地址。
   所以两个对内存空间的使用是不同的。
   有人可能会说值类型不是可以直接调用吗?为什么在调用结构的时候还要用new关键字初始化一个结构呢?
   虽然结构的初始化使用了new关键字可是结构依然分配在堆栈上而不是堆上,如果不适用new,那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用。(不可用哦,亲!)
2.继承性
结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed。
类:完全可扩展的,除非显示的声明sealed否则类可以继承其他类和接口,自身也能被继承。
注意:结构虽然不能被继承,但是结构能够继承接口,方法和类继承接口一样。(接口,结构......好晕+_+)。
3.内部结构:
结构:结构没有默认的构造函数,但是可以添加构造函数。
结构没有析构函数。(貌似析构函数在c#中不大重要了?)
诶有abstract和sealed(因为不能继承)。
不能有protected修饰符
可以不使用new初始化。
在结构中初始化实例字段是错误的。
类:
有默认的构造函数。
有析构函数。
可以使用abstract和sealed。
有protected修饰符。
必须使用new初始化。
这就是结构和类的异同点。
那么我们什么时候该用类什么时候又该用结构呢?
1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些哦。
2.结构表示入点、矩形和颜色这样的轻量对象,例如,如果声明一个含有1000个点的对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
3.在表现抽象和多级别的对象层次时,类是最好的选择。
4.大多数情况下该类型只是一些数据时,结构是最佳的选择。
over,顺便说一下,技术分,你在哪里。快到碗里来!

作者: 杨靖    时间: 2013-9-10 08:40
留足。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2