抽象类
用于归类有相同属性和方法的类(但是不同的类方法的实现方式不一样),比如:不同的领导都有相同的属性和方法,但是不同的领导处理事情的方式不一样
抽象类可以定义属性
可以有抽象方法(抽象方法必须在抽象类中)
抽象方法只有方法声明,没有方法体,继承该抽象类(接口)的非抽象子类必须 实现该抽象方法
可以有非抽象方法
抽象类能定义构造器,但是本身不能实例化,只能实例化该抽象类的实现类
抽象类中怎么确定方法需要用虚方法还是抽象方法?
当不需要用父类中的实现时,将其定义为抽象方法(实现类自己写自己的实现过程)
当实现类的方法和都一样,少数不一样时,将方法以虚方法形式写在父类,在少数不一样的过程中重写方法
public abstract class ClassName
{
public int age{get;set;}
public abstract int GetMaxNumber(int num1,int num2);
public int GetMinNumber(int num1, int num2)
{
return (num1 > num2 ? num2 : num2);
}
}
用于方便有相同属性和方法的类(实现方式也相同,不同的话就要设计重写),比如:控制器中公共的方法放在一个基类控制器中
一个类只能有一个父类,C# 语言中继承 关系具有传递性,即 A 类继承 B 类、C 类继承 A 类,则 C 类也相当于继承了 B 类。
在.NET 6 中,子类中出现同方法名同参数名的情况下(参数不同),程序调用时会选择父类的方法。
在更前面的版本不同类会执行各自的方法,要调用父类的方法要用 base.FunctionName()
但是要直接使用父类的方法,最好用 base.FunctionName() ;
如果想重写方法,要在父类方法中将该名称的方法标注成 virturl ,然后在实现类中用 override 标注重写
类之间只支持单继承,而接口是为了实现多重继承关系设计的
一个类可以同时多个接口,实现接口的同时还能继承其他类
接口也能继承接口
定义接口
接口名称一般用 I 开头,加上其他单词构成
不能使用修饰符
不能使用 public、private、protent、internal 访问修饰符 和 static、virtual、abstract、sealed 修饰符
接口中不能定义字段
接口中的方法不能包含方法体
接口中的默认访问类型是 public
interface IMyInterface
{
//属性
int age{get;set;}
string name{get;set;}
//方法
int MinNumber(int num1, int num2);
int MaxNumber(int num1, int num2);
}
接口不能直接创建而是要通过实现类创建实例
实现类实现接口时必须隐式或显式(不可使用修饰符,属性或方法前加上接口名)实现接口中的所有方法
//隐式实现接口
class DoInterfaceClass : IMyInterface
{
//类新增的属性
public string sex{get;set;}
//隐式实现接口属性
public int age{get;set;}
public string name{get;set;}
//隐式实现接口方法
public int MinNumber(int num1, int num2)
{
return (num1 > num2 ? num2 :num1);
}
public int MaxNumber(int num1, int num2)
{
return (num1 > num2 ? num1 :num2);
}
}
//显示实现接口
class DoInterfaceXSClass : IMyInterface
{
//类新增的属性
public string sex{get;set;}
//显示实现接口属性
int IMyInterface.age{get;set;}
string IMyInterface.name{get;set;}
//显示实现接口方法
int IMyInterface.MinNumber(int num1, int num2)
{
return (num1 > num2 ? num2 :num1);
}
int IMyInterface.MaxNumber(int num1, int num2)
{
return (num1 > num2 ? num1 :num2);
}
}
如果不需要在继承类中完全实现接口方法,可以用抽象方法实现
//不完全实现接口
abctract class DoInterfaceAbstractClass : IMyInterface
{
//类新增的属性
public string sex{get;set;}
public int age{get;set;}
public string name{get;set;}
public int MinNumber(int num1, int num2)
{
return (num1 > num2 ? num2 :num1);
}
public abstract int IMyInterface.MaxNumber(int num1, int num2);
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- hzar.cn 版权所有 赣ICP备2024042791号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务