Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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# - Fatal编程技术网

C# 我可以让一个类方法在不同的实例中表现不同吗?

C# 我可以让一个类方法在不同的实例中表现不同吗?,c#,C#,我编辑了我的问题,下面有更多细节 这个想法可能完全不存在,但我的例子如下: 我想创建一个Person类,并有一个Act()方法(很可能来自接口)。每个人都需要能够行动,但每个人的行动都会有所不同。例如,鲍勃会做饭,山姆会讲笑话,凯文会追狗 有没有办法实现这种类型的东西,或者我需要创建一个Person类,然后派生Bob、Sam和Kevin,并相应地实现Act方法 编辑: 为了澄清,由于这被标记为过于宽泛,以下是我的具体目标 我正在构建一个基于文本的小游戏(我正在学习这门语言,我总是发现游戏可以提供

我编辑了我的问题,下面有更多细节

这个想法可能完全不存在,但我的例子如下:

我想创建一个Person类,并有一个Act()方法(很可能来自接口)。每个人都需要能够行动,但每个人的行动都会有所不同。例如,鲍勃会做饭,山姆会讲笑话,凯文会追狗

有没有办法实现这种类型的东西,或者我需要创建一个Person类,然后派生Bob、Sam和Kevin,并相应地实现Act方法

编辑: 为了澄清,由于这被标记为过于宽泛,以下是我的具体目标

我正在构建一个基于文本的小游戏(我正在学习这门语言,我总是发现游戏可以提供帮助,因为它们需要广泛的功能)。我需要有不同的敌人,每一种都需要行动,但很明显,他们的行动并不都一样。他们需要检查特殊情况,并根据这些情况执行不同的操作

我真的想知道我是否会将每一种敌人分类,或者是否有一种更实际的方法来解决这个问题

正如下面所建议的,策略模式似乎是一个可行的解决方案,尽管最终,我仍然会创建一个动作类,然后将其细分并传递给敌人类


希望这能更清楚我的意图。谢谢大家迄今为止的回答。它已经给了我一些新的东西可以看,这已经很有帮助了。

如果你不想子类化一些东西,你可以做的是实现Person,这样它就把一个动作作为依赖项,然后在Act()方法中执行那个动作


策略模式?你不会子类化
Action
,你只需要实现
IAction
或其他什么。另外,创建不同的类继承自敌方,然后覆盖
.Act()
函数也没有错。Wayne,谢谢你的反馈。我不认为这是错误的,但我不知道这是否是最正确的,如果这是有意义的。是的,这是一个基本的实现。。。使用界面更“干净”,但也应该是一样的。@ZoharPeled是的,我明白你的意思。我只是不知道这是一种战略模式……我要告诉你一个小秘密——在我看到艾米的评论之前,我甚至不知道有这样一种战略模式。一个快速的谷歌让我找到了我链接到的维基页面:-)是的,事实证明这一天并没有白白浪费:-)
public class Person {

   private Action _actAction;

   public Person(Action actAction) {
        _actAction = actAction;
   }

   public void Act() {
       _actAction.Invoke();
   }

}