我不确定如何以优雅的方式提出这个问题,所以在这里。我有这个类在其构造函数中接受一个类AbilityScores的实例。我想知道是否有某种方法可以使它如果传入的AbilityScores实例更新它将自动更新技能实例,如果它不需要更新技能实例,那就更好了更新技能中的属性abilityScores。
它可能与引用它有关,而不是像我在这里那样复制它,但我不确定。任何帮助表示赞赏。
class Skills
{
AbilityScores abilityScores;
List<SkillChecks> skillProficiencies;
List<SkillChecks> skillExpertices;
LevelAndLevelRelatedBonuses level;
public Skills(AbilityScores abilityScores, List<SkillChecks> skillProficiencies, List<SkillChecks> skillExpertices, LevelAndLevelRelatedBonuses level)
{
this.abilityScores = abilityScores;
this.skillProficiencies = skillProficiencies;
this.skillExpertices = skillExpertices;
this.level = level;
}
//Insert other methods here (not important at the moment)
}
答案 0 :(得分:1)
您要求的是默认情况下对象引用的工作原理,假设AbilityScores
是一个类。您的Skills
类有一个引用到该AbilityScores
实例。如果其他内容具有该引用并对该类起作用,则由于您具有相同的引用,因此将更新它。
来自c# documentation on reference types:
C#中有两种类型:引用类型和值类型。引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据。对于引用类型,两个变量可以引用同一个对象;因此,对一个变量的操作可能会影响另一个变量引用的对象。对于值类型,每个变量都有自己的数据副本,并且对一个变量的操作不可能影响另一个变量(除了ref和out参数变量的情况,请参阅ref(C#Reference)和out参数修饰符(C#参考))。
以下关键字用于声明引用类型: 类 接口 代表
假设某些事情没有发生,默认情况下会发生这种情况。见this dotnet fiddle
using System;
public class Program
{
public static void Main()
{
var scores = new AbilityScores() { Speed = 1, Durability = 1 };
var skills = new Skills(scores);
Console.WriteLine("Before change: " + skills.GetCurrentScores());
scores.Speed = 2;
scores.Durability = 0;
Console.WriteLine("After change: " + skills.GetCurrentScores());
}
}
public class Skills
{
public AbilityScores abilityScores;
public Skills(AbilityScores abilityScores)
{
this.abilityScores = abilityScores;
}
public string GetCurrentScores()
{
return "Speed: " + abilityScores.Speed + ", Durability: " + abilityScores.Durability;
}
}
public class AbilityScores
{
public int Speed {get; set;}
public int Durability {get; set;}
}
输出:
Before change: Speed: 1, Durability: 1
After change: Speed: 2, Durability: 0