一、关键字作用
this:
1)当前类的对象 2)调用自己的构造函数
new:
1)创建对象时 2)隐藏父类的成员
二、访问修饰符(能够修饰类的访问修饰符只有俩个internal和public)
public:公开的,公共的
private: 私有的,只有能在当前类的内部访问,类中的成员们,如果不加访问修饰符,默认就是private
protected: 受保护的,可以在当前类的内部访问,也可以在该类的子类中访问
internal:当前项目中都可以访问。
三、常用关键字
this
base:调用父类的构造函数(成员)
new
virtual :标记一个方法是虚方法
abstract:抽象的
override:重写
interface:接口
partial:部分类
sealed:密封类:不允许被继承(但是别人可以继承它)
return:1》在方法中返回返回的值,2》立即结束本次方法
break :跳出当前循环
continue:结束本次循环,回到循环条件进行判断
static:静态的
struct:结构
enum:枚举
const:常量
abstract方法使用及实例
1、练习题 外部设备(抽象方法)
1)分析
2)创建一个控制台应用程序
先写父类,再写三个子类,最后写电脑
1\
/// <summary>
/// 移动存储设备(父类)
/// 俩个抽象函数(一个读,一个写)
/// </summary>
public abstract class MobileStorage
{
public abstract void Read();
public abstract void Write();
}
2\
/// <summary>
/// 子类MobileDisk继承MobileStorage
/// 继承抽象类后,必须重写抽象类中所用的抽象类成员
/// </summary>
public class MobileDisk:MobileStorage
{
public override void Read()
{
Console.WriteLine("移动硬盘在读取数据");
}
public override void Write()
{
Console.WriteLine("移动硬盘在写入数据");
}
}
/// <summary>
/// 子类UDisk继承MobileStorage
/// </summary>
public class UDisk : MobileStorage
{
public override void Read()
{
Console.WriteLine("U盘在读取数据");
}
public override void Write()
{
Console.WriteLine("U盘在写入数据");
}
}
/// <summary>
/// 子类MP3继承MobileStorage
/// </summary>
public class MP3 : MobileStorage
{
public override void Read()
{
Console.WriteLine("Mp3读取数据");
}
public override void Write()
{
Console.WriteLine("Mp3写入数据");
}
public void PlayMusic()
{
Console.WriteLine("Mp3播放音乐");
}
}
3\
/// <summary>
/// 电脑类
/// 按父类处理,父类屏蔽各个子类中的差异
/// </summary>
public class Computer
{
//拿父类俩种方式(1)传值(2)声明一个MobileStorage,存储父类
//1)一种方式:从电脑父类中传入值
//public void CPURead(MobileStorage ms)
//{
// ms.Read();
//}
//2)第二种方式,声明一个类
public MobileStorage MS
{
get;
set;
}
public void CPURead()
{
this.MS.Read();
}
public void CPUWrite()
{
this.MS.Write();
}
}
4\
class Program
{
static void Main(string[] args)
{
//实例化对象
MobileDisk md = new MobileDisk();
MP3 mp3 = new MP3();
UDisk u = new UDisk();
Computer cpu = new Computer();
//子类可以赋值给父类
cpu.MS = md;
cpu.CPURead();
cpu.CPUWrite();
Console.ReadKey();
}
}
2、 虚方法,抽象方法总结
虚方法需注意:
1)父类中如果有方法需要子类重写,则可以将该方法标记为virtual
2)虚方法在父类中必须有实现,哪怕是空实现
3)虚方法子类可以重写(override),也可以不重写
抽象方法注意:
1)需要abstract关键字标记
2)抽象方法不能有任何方法实现
3)抽象成员必须包含在抽象类中
4)由于抽象成员没有任何实现,所以子类必须由抽象成员重写
5)抽象类不能实例化,抽象类的作用是为了让子类继承
6)抽象类中不能包括抽象成员,可以包括有具体代码的成员
7)抽象方法不能有static修饰
四、接口
一、接口注意:
1)接口中只能包含方法(属性、事件、索引器也都是方法)
2)接口中成员都不能有任何实现
3)接口中不能被实例化
4)接口中成员不能有任何访问修饰符(默认public)
5)实现接口的子类必须将接口中的所有成员全都实现
6)子类实现接口的方法时,不需要任何关键字,直接实现即可
7)接口存在的意义就是为了多态
二、接口是什么?什么时候使用接口?使用接口的目的是什么?
接口是为了规范一个能力,表示一个能力
目的实现多态