今天我们学习C#的扩展方法
我们编程中常用构造方法,虚方法,抽象方法,偶尔可能还会用到析构函数,但什么是扩展方法呢?
扩展方法的作用
扩展方法的作用,当我们需要修改底层接口,给它多增加一些功能,但是接口继承之后是一定要实现的,可能会对我们上层的代码影响比较大.又或者我们需要使用到一个密封类,但是它功能不够了,我们不能继承密封类,又想用怎么办呢,也可以用扩展方法来解决问题.
听起来是不是特别厉害,但是实现扩展方法其实不难,我们用代码结合现实例子来解释扩展方法
扩展接口
/// 定义一个学习接口
public interface IStudy{
/// 语文
void Chinese();
/// 数学
void Math();
/// 英语
void English();
}
//这三个课程是基础,每个阶段都要学习的,不会变,所以我把它们放在我们接口里面
在小学的时候,我们这三门课程是够用的
/// 小学
public class PrimarySchool:IStudy{
public void Chinese(){
};
public void Math(){
};
public void English(){
};
}
初中我们除了基础的语数外,还要学习物理化学这些课程,但是我们如果给学习接口里面添加物理化学,小学必须实现这个也不合理.那怎么办呢
/// 初中
public class JuniorHighSchool:IStudy{
public void Chinese(){
};
public void Math(){
};
public void English(){
};
}
这个时候我们可以用扩展方法来解决这个问题
使用扩展需要先定义一个静态类
/// 学习扩展类
public static class IStudyExtend{
//物理
public static void Physics(this IStudy istudy){
};
//化学
public static void Chemistry(this IStudy istudy){
};
//扩展一个带参的函数
public static void WithParam(this IStudy istudy,int param){
};
}
这个时候,我们的学习接口中也拥有量物理和化学的课程,继承IStudy接口我们发现,我们还是只需要实现基础的语数外三个函数就好了,但是我们却可以调用物理和化学的函数,因为他们被扩展了.这样初中就可以学习它对应的课程.
后续我们多了新的课程,也可以在扩展类中添加,不用去动底层的接口
注意:接口扩展,函数不强制实现
扩展密封类
为什么要扩展密封类?
当我们需要使用一个底层类,但是它的功能不够,我们想继承它,然后用子类实现某些方法,但是发现这个底层类是密封的,怎么办呢?又不能继承,但是我们还想用.
这个时候我们就可以使用扩展方法来实现我们的需求
实现方式和扩展接口是一样的
///这是我们的一个管家
public sealed class Steward{
//开车
public void Drive(){
};
//做饭
public void Cook(){
};
//跳舞
public void Dance(){
};
}
我们请了一个管家,技能比较多样,会开车,做饭,跳舞,但是我们还想让管家会武功怎么办呢
//学徒
public class Apprentice:Steward{
public void KongFu(){
};
}
我们想请一个会武功的学徒,传承管家的其它技能,也满足了我们的需求,但是管家不愿意啊,你学徒都会了,我就没有用了,不愿意教授学徒.
//管家培训机构
public static class StewardExtend{
public static void KongFu(this Steward steward)
}
这个时候呢,我们找到了一本和死亡笔记一样神奇的书,我们把管家的名字写上去,再把我们想要的技能写上去,管家就会功夫了,我们就可以不用请学徒了,一份工资让管家打四份工
个人理解,如果发现错误,欢迎大佬随时指正😊
转载:https://blog.csdn.net/Liu_ChangC/article/details/117285699