c#抽象方法、静态类

抽象方法的声明

abstract class Player{
public abstract void Train();
}

1.抽象方法必须放在抽象类中,class前面加上修饰符abstract
2.返回值前面也要加修饰符abstract
3.抽象方法没有方法体,格式: 访问修饰符 abstract 返回值类型 方法名称(参数列表)

抽象方法的特性
1.抽象方法是隐式的虚方法
2.抽象方法只能有声明,没有实际的实现
3.抽象方法必须被子类重写并实现,或者使子类也为抽象类
4.访问修饰符不能为private,不然子类就无法访问也就无法重写了
抽象方法的重写

class FootPlayer Player(){
public override void Train(){
Console.WriteLine("正在训练");
}
}

抽象类的特性
1.抽象类不能使用new关键字实例化,抽象类是不完整的
2.抽象类除了可以拥有普通成员外,还可以拥有抽象方法
3.从抽象类派生出的非抽象类必须实现抽象类当中的所有抽象方法
4.抽象类不能实例化但可以拥有构造方法,构造方法不能是抽象方法
5.不能使用sealed修饰符修饰抽象类,因为采用sealed修饰符修饰的类是无法被继承的,而抽象类是必须被继承的。

静态成员

class Person{
//人口数量
public static void population = 700;
//设置人口数量
public static void SetPupolation(long population){
Person.population = population;
}
}

静态成员;静态成员变量是和类相关联的,他可以作为类中共有的变量(是一个共性的表现),静态成员变量不依赖特定对象的存在,访问的时候用类来操作
静态成员使用static关键字修饰
静态成员要通过类名就访问

public  static void Main(string[] args){
Person.SetPopulation(6000);
Console.WriteLine(Person.SetPopulation);
}

静态成员的特点:
1.静态成员随着类的加载而加载,不管对一个类创建多少个实例,静态成员都只有一个副本
2.静态方法可以被重载但是不能被重写,因为他们属于类,不属于任何实例
3.静态成员由类名通过点语法调用,非静态方法通过对象调用
4.静态方法只能访问静态成员,包括静态成员变量和方法,实例方法可以访问实例成员变量和实例方法,也可以访问静态成员

静态构造

class Hero(){
public Hero(strig name,int age){
//实例构造函数
this.age = age;
this.name = name;
}
static Hero(){
Console.WriteLine("Hero类的静态构造函数");
}
}

静态构造的特性
1.静态构造函数格式是固定的,不能有访问修饰符不能带任何参数
2.一个类只能有一个静态构造函数,即静态构造函数不能重载
3.静态构造函数不能直接被调用,当创建类实例或访问任何静态成员时,静态构造函数会被自动调用,并且只执行一次
4.一个类的静态函数在它所有的派生类的静态函数执行后执行

单例模式
什么叫设计模式?
设计模式是前人返回实践设计,总结出来的代码架构思路或模式。常用的设计模式有:单例模式、工厂模式、代理模式等

单例模式的三要点:
1.单例模式某个类只能有一个实例
2.单例模式必须自行创建这个实例
3.单例模式必须自行对外提供这个实例

单例模式实现步骤
1.默认构造使用private修饰
2.内建该类的静态实例
3.静态构造方法中给该静态方法做实例初始化
4.对外提供获取该静态实例的方法

单例模式实现

public static SingleTon(){
//构造方法必须私有化
private SingleTon(){};
//定义静态实例
private static SingleTon instacne;
//对外提供获取该静态实例的方法
public static SingleTon GetInstace(){
//对外提供获取该静态实例的接口
if(instance == null{
instacne = new SingleTon();
}
return instance;
}
}

单例的使用

SingleTon sinleton = SingleTon.GetInstacne();
Console.WriteLine(singleton.name);

索引器
索引器允许一个对象可以像数组一样被索引,当类定义一个索引器时,该类的行为就可以看作是一个虚拟数组样,可以用数组访问修饰符[] 来访问该类的实例

public string[] name = {"张三","李四","王五"};
public string this[int index]{
set{
names[index] = vlaue;
}
get{
return names[value];
}
}

命名空间/名称空间
命名空间是提供一种让一组名称与其他名称分隔开的方法。在一个名称空间声明的类与其他名称空间声明的类相同也不冲突。
运算符重载
重定义或重载c#内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字operator 后面跟运算符的符号来定义的。

public static Person operator + (Person p1 ,Person p2){
p1.index += p2.index;
return p1;
}
接口
interface IUSB{
string USB_Type{get;set}
string ReadFile();
void WriteFile(string content);
}
interface IVGA{
string ShowVideoData();
}

1.接口可以包含时间、索引器,方法和属性,但是不能包含字段
2.接口是一个引用类型,只包含了功能的定义、不包含功能的实现
3.接口的访问修饰符是固定的public,不能用其他访问修饰符
4.接口成员不能添加任何的访问修饰符
5.类的继承只能单继承,接口的实现可以多实现

class Person{
public void Say(){
}
}
interface IWolf{
public void attack();
}
class PersonWolf: Person , IWolf{
public void attck(){
}
}
class Computer:IUSB{
public string USB_Type{get;set}
public string ReadFile(){
Console.WriteLine("正在读取文件");
return "删库跑路";
}
public void WriteFile(string content){
Console.WriteLine("正在写入文件" + content);
}
public string ShowVideoData(){
Console.WriteLine("正在显示视频数据");
return "马克思";
}
}

1.接口一旦被实现,就要实现接口中所有的成员
2.接口无法直接进行实例化,因为其成员必须通过实现接口的任何类或结构来实现
3.实现多接口时,使用逗号隔开
4.类与类之间叫做继承,接口与接口,接口与类之间叫做实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值