适配器模式

     适配器模式:将一个类的接口转为另一个接口,使由于接口不兼容的而不能工作在一起的那些类可以一起工作。在C#视频中就接触到它了,当时就对它挺好奇的。我形象的称它为:充电器模式。到大话了,又重新学习了它,很有亲切感。而且还知道了有两种适配器:类适配器和对象适配器。

      根据定义我们知道当我们的类的接口不一致时,可以使用该模式。一般情况下,我们想复用现有的类,但是类的接口与复用环境不一致,那我们就可以用适配器模式了。


类图:

     


    代码部分就不写了,感觉挺简单的,但是在敲代码时,发现了了一个有趣的事情。还得看代码

abstract class Player  //这是一个抽象父类
{
    protected string name;
  <span style="color:#ff0000;"> // public Player()
   // {}</span></span>
 
    public Player(string name)
    {
        this.name = name;
    }
    public abstract void Attack();
    public abstract void Defense();
}
class Forwards:Player          //这是一个具体的子类
{
  
    public Forwards(string name)<span style="color:#ff0000;">:base(name)</span>
    {
       
    }
    public override void Attack()
    {
        Console.WriteLine("前锋{0} 进攻", name);
    }
    public override void Defense()
    {
        Console.WriteLine("前锋 {0} 防守", name);
    }
}


再敲适配器这块代码时,base关键字总是出现,我就不明白了base关键字为什么在这里出现呢,还每个子类都出现。果断就把这个关键字去了,于是程序果断给了我个提示:Player类没有参数为0的构造函数。于是乎我就给Player类一个无参的构造函数,发现还真行,这个错误就没有了。不过没明白base这个名词,到网上查了查。看完后觉得自己的面向对象基础实在是薄弱啊。继续努力吧

      发现:new 一个类的对象,不是直接创建这个对象的,而是先加载这个类,然后加载父类,也就是说类的加载是从下而上的顺序加载的,类加载完了,就是创建对象,创建对象是从上而下的顺序创建的,先父类对象,后子类对象。以便于子类继承父类的一些属性方法。

最后再回归我们的问题:父类没有参数为0的构造函数,原来子类的构造函数初始化时,会先找父类的构造函数,如果没有指定父类哪个构造函数时,他会找父类无参的构造函数,所以当找不到时就会报错了。我想这就是问题的症结所在。而base这个关键字,我想就是指定子类调用父类的哪个构造函数吧。但是当父类的构造函数多种多样呢,怎么用base关键字呢。继续学习中。

        欢迎大家及时留言,指出自己的理解错误。点击参考博客——子类对象的创建过程






评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值