C#练习题答案: PatternCraft - 观众【难度:1级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

PatternCraft - 观众【难度:1级】:

答案1:

using System;

public interface IVisitor
{
    void VisitLight(ILightUnit unit);
    void VisitArmored(IArmoredUnit unit);
}

public interface ILightUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public interface IArmoredUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public class Marine : ILightUnit
{
    public int Health { get; set; } = 100;

    public void Accept(IVisitor visitor)
    {
        visitor.VisitLight(this);
    }
}

public class Marauder : IArmoredUnit
{
    public int Health { get; set; } = 125;

    public void Accept(IVisitor visitor)
    {
        visitor.VisitArmored(this);
    }
}

public class TankBullet : IVisitor
{
    public void VisitLight(ILightUnit unit)
    {
        unit.Health -= 21;
    }

    public void VisitArmored(IArmoredUnit unit)
    {
        unit.Health -= 32;
    }
}

答案2:

   public interface IVisitor
    {
        void VisitLight(ILightUnit unit);
        void VisitArmored(IArmoredUnit unit);
    }

    public interface ILightUnit
    {
        int Health { get; set; }

        void Accept(IVisitor visitor);
    }

    public interface IArmoredUnit
    {
        int Health { get; set; }

        void Accept(IVisitor visitor);
    }

    public class Marine : ILightUnit
    {
        public int Health { get; set; } = 100;

        public void Accept(IVisitor visitor)
        {
            visitor.VisitLight(this);
        }
    }

    public class Marauder : IArmoredUnit
    {
        public int Health { get; set; } = 125;

        public void Accept(IVisitor visitor)
        {
            visitor.VisitArmored(this);
        }
    }

    public class TankBullet : IVisitor
    {
        public void VisitLight(ILightUnit unit)
        {
            unit.Health -= 21;
        }

        public void VisitArmored(IArmoredUnit unit)
        {
            unit.Health -= 32;
        }
    }

答案3:

using System;

public interface IVisitor
{
    void VisitLight(ILightUnit unit);
    void VisitArmored(IArmoredUnit unit);
}

// Health and Accept() can be encapsulated into a single interface contract
// since these are shared by all units.
public interface IUnit
{
    int Health { get; set; }
    
    void Accept(IVisitor visitor);
}

// Created an abstract Unit class for shared property implementation
// and forced adherence to the IUnit pattern
public abstract class Unit
{
    private int _health;
    public int Health
    {
        get { return _health; }
        set { _health = value; }
    }

    protected Unit() { }
    protected Unit(int health)
    {
        this._health = health;
    }

    public abstract void Accept(IVisitor visitor);
}


// Converted LightUnit/ArmoredUnit to Abstract classes inherited from Unit, 
// so if we create more concrete unit classes we already have the Accept(IVisitor)
// implemented correctly.
public abstract class ILightUnit : Unit
{
    protected ILightUnit(int health) : base(health) { }

    public override void Accept(IVisitor visitor)
    {
        visitor.VisitLight(this);
    }
}

public abstract class IArmoredUnit : Unit
{
    protected IArmoredUnit(int health) : base(health) { }

    public override void Accept(IVisitor visitor)
    {
        visitor.VisitArmored(this);
    }
}

// Note how our concrete units only need a starting health value that
// we pass into the constructor, and everything else is handled.
// Since the Accept() method is abstract, we can override it in any
// class for a specific implementation as needed (see: Marauder)
public class Marine : ILightUnit
{
    public Marine() : base(100) { }
}

public class Marauder : IArmoredUnit
{
    public Marauder() : base(125) { }
    
    public override void Accept(IVisitor visitor)
    {
        base.Accept(visitor);
        Console.WriteLine("Visited!");
    }
}

public class TankBullet : IVisitor
{
    public void VisitLight(ILightUnit unit)
    {
        unit.Health -= 21;
    }

    public void VisitArmored(IArmoredUnit unit)
    {
        unit.Health -= 32;
    }
}

答案4:

public class Reaper : ILightUnit
{
    public Reaper() : base(115) { }
}

答案5:

using System;

public interface IVisitor
{
    void VisitLight(ILightUnit unit);
    void VisitArmored(IArmoredUnit unit);
}

public interface ILightUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public interface IArmoredUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public class Marine : ILightUnit
{
    public int Health { get; set; } = 100;

    public void Accept(IVisitor visitor) => visitor.VisitLight(this);
}

public class Marauder : IArmoredUnit
{
    public int Health { get; set; } = 125;

    public void Accept(IVisitor visitor) => visitor.VisitArmored(this);
}

public class TankBullet : IVisitor
{
    public void VisitLight(ILightUnit unit) => unit.Health -= 21;
    public void VisitArmored(IArmoredUnit unit) => unit.Health -= 32;
}

答案6:

using System;

public interface IVisitor
{
    void Visit(ILightUnit unit);
    void Visit(IArmoredUnit unit);
}

public interface ILightUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public interface IArmoredUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public class Marine : ILightUnit
{
    public int Health { get; set; } = 100;

    public void Accept(IVisitor visitor)
    {
        visitor.Visit(this);
    }
}

public class Marauder : IArmoredUnit
{
    public int Health { get; set; } = 125;

    public void Accept(IVisitor visitor)
    {
        visitor.Visit(this);
    }
}

public class TankBullet : IVisitor
{
    public void Visit(ILightUnit unit)
    {
        unit.Health -= 21;
    }

    public void Visit(IArmoredUnit unit)
    {
        unit.Health -= 32;
    }
}

答案7:

using System;

public interface IVisitor
{
    void VisitLight(ILightUnit unit);
    void VisitArmored(IArmoredUnit unit);
}

public interface ILightUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public interface IArmoredUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public class Marine : ILightUnit
{
    private int _Health = 100;

    public int Health
    {
      get { return _Health; }
      set { _Health = value; }
    }

    public void Accept(IVisitor visitor)
    {
      visitor.VisitLight(this);
    }
}

public class Marauder : IArmoredUnit
{
    private int _Health = 125;
    public int Health
    {
      get { return _Health; }
      set { _Health = value; }
    }

    public void Accept(IVisitor visitor)
    {
      visitor.VisitArmored(this);
    }
}

public class TankBullet : IVisitor
{
    public void VisitLight(ILightUnit unit)
    {
        unit.Health -= 21;
    }

    public void VisitArmored(IArmoredUnit unit)
    {
        unit.Health -= 32;
    }
}

答案8:

using System;

public interface IVisitor
{
    void VisitLight(ILightUnit unit);
    void VisitArmored(IArmoredUnit unit);
}

public interface ILightUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public interface IArmoredUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public class Marine : ILightUnit
{
     public int Health { get; set; } = 100;

    public void Accept(IVisitor visitor)
    {
        Health = Health - 21;
    }
}

public class Marauder : IArmoredUnit
{
     public int Health { get; set; } = 125;

    public void Accept(IVisitor visitor)
    {
        Health = Health - 32;
    }
}

public class TankBullet : IVisitor
{
  public int Health { 
    get { return this.Health; }
  }
    public void VisitLight(ILightUnit unit)
    {
        unit.Accept(this);
        
    }

    public void VisitArmored(IArmoredUnit unit)
    {
        unit.Accept(this);
    }
}

答案9:

using System;

public interface IVisitor
{
    void Visit(IUnit unit);
}

public interface IVisitable
{
  void Accept(IVisitor visitor);
}

public abstract class VisitableUnit<TUnit> : IVisitable, IUnit
  where TUnit : IUnit
{
  public int Health { get; set; }

  public void Accept(IVisitor visitor)
  {
    visitor.Visit(this);
  }
}

public interface IUnit
{
    int Health { get; set; }
}

public interface ILightUnit : IVisitable, IUnit
{
}

public interface IArmoredUnit : IVisitable, IUnit
{
}

public class Marine : VisitableUnit<Marine>, ILightUnit
{
    public Marine()
    {
      Health = 100;
    }
}

public class Marauder : VisitableUnit<Marauder>, IArmoredUnit
{
    public Marauder()
    {
      Health = 125;
    }
}

public class TankBullet : IVisitor
{
    public void Visit(IUnit unit)
    {      
      if (unit is IArmoredUnit)
          unit.Health -= 32;
      if (unit is ILightUnit)
          unit.Health -= 21;
    }
}

答案10:

using System;

public interface IVisitor
{
    void VisitLight(ILightUnit unit);
    void VisitArmored(IArmoredUnit unit);
}

public interface ILightUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public interface IArmoredUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public class Marine : ILightUnit
{
    public int Health { get; set; }

    public Marine()
    {
      this.Health = 100;
    }

    public void Accept(IVisitor visitor)
    {
        visitor.VisitLight(this);
    }
}

public class Marauder : IArmoredUnit
{
    public int Health { get; set; }

    public Marauder()
    {
      Health = 125;
    }

    public void Accept(IVisitor visitor)
    {
        visitor.VisitArmored(this);
    }
}

public class TankBullet : IVisitor
{
    public void VisitLight(ILightUnit unit)
    {
        unit.Health -= 21;
    }

    public void VisitArmored(IArmoredUnit unit)
    {
                unit.Health -= 32;
    }
}

答案11:

using System;

public interface IVisitor
{
    void VisitLight(ILightUnit unit);
    void VisitArmored(IArmoredUnit unit);
}

public interface ILightUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public interface IArmoredUnit
{
    int Health { get; set; }

    void Accept(IVisitor visitor);
}

public class Marine : ILightUnit
{
    public int Health { get; set; } = 100;

    public void Accept(IVisitor visitor)
    {
        this.Health -= 21;
    }
}

public class Marauder : IArmoredUnit
{
    public int Health { get; set; } = 125;

    public void Accept(IVisitor visitor)
    {
        this.Health -= 32;
    }
}

public class TankBullet : IVisitor
{
    public void VisitLight(ILightUnit unit)
    {
        
    }

    public void VisitArmored(IArmoredUnit unit)
    {
        
    }
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值