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

C#,是否存在接受类的变量或更改所选类的方法

C#,是否存在接受类的变量或更改所选类的方法,c#,C#,基本上,我想做的是让一个类根据自己的值更改多个不同的类。但是,我还想更改已更改的类以及使用变量之类的东西进行操作的类 理想的解决方案是称为selectedClass和actingClass的变量。在那里你可以说 selectedClass = person1, actingClass = person2 然后做一些类似的事情 selectedClass.health = selectedClass.health - actingClass.damage 并让它从person1类或person

基本上,我想做的是让一个类根据自己的值更改多个不同的类。但是,我还想更改已更改的类以及使用变量之类的东西进行操作的类

理想的解决方案是称为selectedClass和actingClass的变量。在那里你可以说

selectedClass = person1, actingClass = person2
然后做一些类似的事情

selectedClass.health = selectedClass.health - actingClass.damage
并让它从person1类或person2类中提取或更改值。然后可以更改person5为actingClass,person15为selectedClass的selectedClass和actingClass,并让它获取或设置这些不同的相应值

我不知道如何在不为每个可能的人创建不同的脚本的情况下拥有此功能,并更改每个其他可能的人。这将是一个耗时且不是非常有效的解决方案


如果我忽略了一个简单的解决方案,我很抱歉。提前感谢任何人的帮助

您需要的是或多或少的接口:

public interface IPerson {
   int Health {get; set;}
   int Damage {get; set;}
}

public class ActionService(){
  public IPerson SelectedClass {get;set;}
  public IPerson ActingClass {get;set;}

  public void Hit()
  {
     this.SelectedClass.Health -= this.ActingClass.Damage;
  }

}
现在你可以做:

public class JackieChan : IPerson {

  public int Health {get;set;} = 120;
  public int Damage {get;set;} = 20;
}

public class Terminator: IPerson {

  public int Health {get;set;} = 500;
  public int Damage {get;set;} = 25;
}

var action = new ActionService { SelectedClass = new JackieChan(), ActingClass = new Terminator() };

action.Hit();

首先,我认为你弄错了类和对象。看

因此在本例中,
selectedClass
actingClass
实际上是对对象的引用,而不是对类的引用。您应该将其命名为
selectedPerson
actor

因为它们是对对象的引用,所以您可以执行您所说的操作:

var selectedPerson = person1;
var actor = person2;
... change on selectedPerson will affect on person1...

... and you can assign selectedPerson to person 5...

您不需要一个公共基类或接口吗?请参阅或底部的形状示例。您真的有不同的类,还是一个类有不同的实例?