day10
抽象方法
astract 抽象方法声明
1.抽象方法没有方法体
2.必须在子类里重写
3.必须重写用抽象
4.抽象方法必须放在抽象类里
5.支持重写
6.抽象方法不能是private,不然无法被访问
↑隐式的虚方法
只能由声明但是不提供实际的实现
class Manager:Emplyee
{
public override void CalculateSalary()
{
throw new NotImplementedException();
}
public override void MakeMoney()
{
throw new NotImplementedException();
}
public override void WorkVontent()
{
throw new NotImplementedException();
}
}
抽象类
1.抽象类不能被实例化
2.不能被new
3.可以有构造体
4.构造体不能是虚方法
5.不能被sealed修饰,sealed密封,不允许被继承
abstract class Emplyee
{
public string name;
public int id;
public abstract void CalculateSalary();
public abstract void WorkVontent();
public abstract void MakeMoney();
}
静态成员
用static修饰,不依赖特定对象的存在,访问的时候通过类来操作
静态过后不变了,也不被new出来的对象开辟新空间
随着类的加载而加载,无论一个类创建有多少个实例,静态成员都只有一个副本
静态方法可以被重载但是不能被重写
只能访问静态成员,包括静态成员变量和静态方法,实例方法可以访问实例成员变量与实例方法,也可以访问静态成员
private static SingleTon insatnce;//静态字段
静态构造函数
没有访问修饰符
没有传入参数
不可以被重载
不可以被直接调用,new和访问静态成员的时候自动执行,只执行一次
在派生类静态构造函数之后执行
public class SingleTon
{
private SingleTon() { }//构造函数私有化
private static SingleTon insatnce;//静态字段
public static SingleTon GetInstance()
{
if (insatnce == null)//判断有没有被实例化
{
insatnce = new SingleTon();//没有的话实例化一个
}
return insatnce;
}
}
设计模式
总结出来的代码架构设计思路或模式
单例,工厂,代理等等
单例
满足某个类只有一个实例的代码设计方式成为单例模式←只能实例化出一个实例
某个类只能有一个实例
必须自行创建这个实例
必须向外界提供这个实例
class AudioManager//有且只有一个实例
{
private static AudioManager instance;
public static AudioManager GetInstance()
{
if (instance == null)
{
instance = new AudioManager();
}
return instance;
}
private AudioManager() { }//构造私有化
public void PlayBgm(){}//播放
public void Stop(){}//停止
}
构造用private修饰
在内部创建一个静态实例 做初始化
对外提供接口访问静态实例
单例的使用
SingleTon.GetInstance();
AudioManager manager = AudioManager.GetInstance();
manager.PlayBgm();
DateManager dateManager = DateManager.Instance;
索引器
允许一个对象可以像数组一样被索引
class Person
{
public string[] names = { "李逍遥","逍遥散人" };
public string this[int index]
{
set
{
names[index] = value;
}
get
{
return names[index];
}
}
Person person = new Person();
Console.WriteLine(person.names[0]);
命名空间/名称空间
提供让一组数据与另一组数据分割的方法,这个命名空间里类的名字与另一个命名空间里的类名字没有任何关系,可以共存
namespace name
{
//代码
}
//使用
using name;
using text name;
运算符重载
重定义c#中的运算符
是通过operator后跟着的运算符定义的静态方法
//运算符重载
public static Person operator +(Person p1,Person p2)
{
Person p = new Person();
p.age = p1.age + p2.age;
return p;
}
Person p1 = new Person();
p1.age = 10;
Person p2 = new Person();
Person p3 = p1 + p2;
接口
是一组包含了类或者结构可以实现功能的定义 接口一般用大写I作为开头
可以包含事件,索引器,方法 属性(就是不能用字段
是一个引用类型 只包含功能定义,不包含实现
默认是public 不能用其他修饰符修饰
接口成员也不能添加任何的访问修饰符
可以同时实现多个接口
接口一旦实现就得全部实现
接口不能实例化
实现多接口用逗号隔开
//定义求面积的的接口Iarea与求体积的Ivolemn,定义长方体类分别实现Iarea与Ivolemn接口。
//体积接口
interface Ivolumn
{
void volumn();
}
//面积接口
interface Iarea
{
void area();
}
class ChangFangTi:Iarea,Ivolumn
{
int c;//长
int k;//宽
int g;//高
int iarea;//面积
int ivolumn;//体积
public void area()
{
iarea = c * k * 2 + k * g * 2 + c * g * 2;
}
public void volumn()
{
ivolumn = c * g * k;
}
}