我试图创建一个拥有一套技能和一套特色的“玩家”。每个技能都与某个特殊技能相关联。
然后给玩家 7 种特殊技能和 13 种技能。为了使其更具可读性(在我看来),我将结构用于特殊、技能和玩家。这也适用于使用结构..
请看一下我的代码,它非常简单。
private struct specials
{
public string name;
public int value;
public specials(string n, int v)
{
this.name = n;
this.value = v;
}
}
private struct skills
{
public string name;
public specials spec;
public int value;
public skills(string n, specials s, int v)
{
this.name = n;
this.spec = s;
this.value = v;
}
}
public struct player
{
public specials strength = new specials("STRENGTH", 0);
public specials perception = new specials("PERCEPTION", 0);
public specials endurance = new specials("ENDURANCE", 0);
public specials charisma = new specials("CHARISMA", 0);
public specials intelligence = new specials("INTELLIGENCE", 0);
public specials agility = new specials("AGILITIY", 0);
public specials luck = new specials("LUCK", 0);
//Complains about charisma, saying an object reference is required for
// the nonstatic field method or property
public skills barter = new skills("Barter", charisma, 0);
}
您可以在代码中的注释中看到我的问题。现在,我不明白为什么这应该是一个问题。
玩家被赋予了他自己的特殊技能和技能,而技能又与特殊技能相关联(我希望通过参考)。
public specials charisma = new specials("CHARISMA", 0);
这会创建一个名为魅力的新特殊对象,对吗?那么为什么这不能传递给一个新的技能对象。
最后一件事。出于某种原因,我仍然不明白,但真的很想知道,这可以通过在声明魅力时使用静态来解决,但我无法通过键入在我的表单类中更改它
player.charisma.value = 123;
问候!
编辑:
我刚刚发现了一些我无法解释的东西。而不是写(产生错误)
public skills barter = new skills("Barter", charisma, 0);
我写:(玩家现在是一个类)
public skills barter = new skills();
然后在玩家构造函数中,我可以像这样设置易货交易:
barter.spec = strength;
为什么会这样?这是不好的做法吗?好吧,无论如何我都不会使用它,因为如果我更改特殊球员,它将不会在易货交易中更新,因为我了解到结构是按值而不是引用传递的。但是我关于为什么我不能用结构初始化结构的问题仍然存在。