Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-在另一个具有相同含义的类中创建类实例_C#_Instance - Fatal编程技术网

C#-在另一个具有相同含义的类中创建类实例

C#-在另一个具有相同含义的类中创建类实例,c#,instance,C#,Instance,我想创建一个名为敌方的类,该类应用于编程rpg主题的作战系统。问题是我想在敌人类中创建多个怪物类型,但是我必须为每个敌人类创建一种可能性,例如敌人.地精或敌人.傀儡 问题: 我如何通过在作战系统功能中只使用一个参数来实现这一点?我想用 public static void InitiateBattle ( Player player, Enemy enemy ) 但是现在我不能使用敌方.Goblin实例,因为它不能隐式地将敌方.Goblin转换为敌方。我怎样才能用最少的代码最轻松地修复此问题?

我想创建一个名为敌方的类,该类应用于编程rpg主题的作战系统。问题是我想在
敌人
类中创建多个怪物类型,但是我必须为每个敌人类创建一种可能性,例如
敌人.地精
敌人.傀儡

问题:
我如何通过在作战系统功能中只使用一个参数来实现这一点?我想用

public static void InitiateBattle ( Player player, Enemy enemy )
但是现在我不能使用
敌方.Goblin
实例,因为它不能隐式地将
敌方.Goblin
转换为
敌方
。我怎样才能用最少的代码最轻松地修复此问题?

您需要使用

然后你就可以将一个地精作为敌人传过去。

你需要使用


然后你就可以将一个地精作为敌人传进来。

听起来你想使用继承

public class Enemy {}
public class Goblin : Enemy {}
public class Golem : Enemy {}
然后,您可以将
Goblin
Golem
的实例传递给您的方法,该语句将是有效的,因为编译器会将您的对象“装箱”到父类型的实例中

然后,如果您想使用Goblin或Golem子类中的成员,则需要使用
as
敌人
参数变量“强制”回相应的类型:

public static void InitiateBattle (Player player, Enemy enemy)
{
     var golem = enemy as Golem;
     var goblin = enemy as Goblin;
}
确保在施放后检查null


请记住,C#不允许多重继承;每个类只能从一个父类继承。

听起来您想使用继承吗

public class Enemy {}
public class Goblin : Enemy {}
public class Golem : Enemy {}
然后,您可以将
Goblin
Golem
的实例传递给您的方法,该语句将是有效的,因为编译器会将您的对象“装箱”到父类型的实例中

然后,如果您想使用Goblin或Golem子类中的成员,则需要使用
as
敌人
参数变量“强制”回相应的类型:

public static void InitiateBattle (Player player, Enemy enemy)
{
     var golem = enemy as Golem;
     var goblin = enemy as Goblin;
}
确保在施放后检查null


请记住,C#不允许多重继承;每个类只能从一个父类继承。

我认为最好使用接口

public interface IEnemy
{
    //e.g.
    public void Attack();
}

public class Goblin : IEnemy
{
    public void Attack()
    {
        throw new System.NotImplementedException();
    }
}

public class Battle
{
    public static void InitiateBattle(Player player, IEnemy enemy);
}

我认为最好使用界面

public interface IEnemy
{
    //e.g.
    public void Attack();
}

public class Goblin : IEnemy
{
    public void Attack()
    {
        throw new System.NotImplementedException();
    }
}

public class Battle
{
    public static void InitiateBattle(Player player, IEnemy enemy);
}

阅读关于类继承阅读关于类继承关于Healthpoints之类的属性,我将如何调用/设置它们?@IanH。因为所有敌人都有生命,所以他们会进入敌人的职业。那么像Healthpoints这样的属性呢?我如何调用/设置它们?@IanH。因为所有敌人都有生命,所以他们会进入敌人的职业。