gpt4 book ai didi

c# - 为什么要用它继承的抽象类而不是它自己的类来声明一个对象

转载 作者:行者123 更新时间:2023-11-30 13:49:04 24 4
gpt4 key购买 nike

public abstract class Character
{
protected Weapon weapon;

public string Name;
public int Health = 10;
public int Strength;

public Character()
{
}

public void Attack()
{
weapon.useweapon();
}
}

public class Warrior : Character
{
public Warrior()
{
weapon = new Sword();
Health = 10;
Strength = 25;
}

public void SetWeapon(Weapon newweapon)
{
weapon = newweapon;
}

}

public class Wizard : Character
{
public Wizard()
{
weapon = new Spell();
Health = 15;
Strength = 10;
}
}

如您所见,有一个抽象的 Character 类和两个 Character 子类。在这个程序中,只有战士可以更换武器。现在,我不想讨论代码本身,我想知道的是,在我的实现代码中,我为什么要使用它:

Character Zizo = new Warrior();
Character Hang = new Wizard();

而不是 -

Warrior Zizo = new Warrior();
Wizard Hang = new Wizard();
Zizo.SetWeapon(new Axe()); //I can only use this method in this implementation

这两者有什么区别,通过抽象类声明对象有什么好处?

最佳答案

客户端代码应使用最低要求的接口(interface)或抽象类定义。您这样做主要是为了使代码更加松散耦合。在您的示例中,如果调用代码只需要 Attack() 但不关心它是如何执行、实现的,或者是什么特定类型(例如 WarriorWizard 等)正在执行攻击,那么它应该使用 abstract Character 类。

当它必要必须了解特定实现或具体类时,明确地使用一个是合适的。

关于c# - 为什么要用它继承的抽象类而不是它自己的类来声明一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10321526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com