C#核心知识回顾——5.结构体和类区别、抽象类和接口、核心知识图解

1.结构体和类区别

        结构体和类最大的区别是在存储空间上的,因为结构体是值,类是引用,因此他们的存储位置一个在栈上,一个在堆上。

        结构体和类在使用上很类似,结构体甚至可以用面向对象的思想来形容一类对象。
        结构体具备着面向对象思想中封装的特性,但是它不具备继承和多态的特性,因此大大减少了它的使用频率,由于结构体不具备继承的特性,所以它不能够使用protected保护访问修饰符。

1.结构体是值类型,类是引用类型
2.结构体存在栈中,类存在堆中
3.结构体成员不能使用protected访问修饰符,而类可以
4.结构体成员变量申明不能指定初始值,而类可以
5.结构体不能申明无参的构造函数,而类可以
6.结构体申明有参构造函数后,无参构造不会被顶掉
7.结构体不能申明析构函数,而类可以
8.结构体不能被继承,而类可以
9.结构体需要在构造函数中初始化所有成员变量,而类随意
10.结构体不能被静态static修饰(不存在静态结构体),而类可以
11.结构体不能在自己内部申明和自已一样的结构体变量,而类可以

如何选择结构体和类:
1.想要用继承和多态时,直接淘汰结构体,比如玩家、怪物等等
2.对象是数据集合时,优先考虑结构体,比如位置、坐标等等
3.从值类型和引用类型赋值时的区别上去考虑,比如经常被赋值传递的对象,并且改变赋值对象,     原对象不想跟着变化时,就用结构体。比如坐标、向量、旋转等等
 

2.抽象类和接口

相同点:
1都可以被继承
2.都不能直接实例化
3.都可以包含方法申明
4.子类必须实现未实现的方法
5.都遵循里氏替换原则

区别:
1.抽象类中可以有构造函数;接口中不能
2.抽象类只能被单一继承;接口可以被继承多个
3.抽象类中可以有成员变量;接口中不能
4.抽象类中可以申明成员方法,虚方法,抽象方法,静态方法;接口中只能申明没有实现的抽象方     法
5.抽象类方法可以使用访问修饰符;接口中建议不写默认默认public

如何选择抽象类和接口:
表示对象的用抽象类,表示行为拓展的用接口
不同对象拥有的共同行为,我们往往可以使用接口来实现

举个例子:
动物是一类对象,我们自然会选择抽象类;而飞翔是一个行为,我们自然会选择接口。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值