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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 七里香 中级黑马   /  2013-9-9 20:59  /  1312 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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,顺便说一下,技术分,你在哪里。快到碗里来!

评分

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

查看全部评分

1 个回复

倒序浏览
留足。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马