[英]c#: passing struct object to struct object
我試圖創造一個擁有一系列技能和一系列特色的“玩家”。 每項技能都與某種特殊關聯。
然后玩家將獲得7個特殊技能和13個技能。 為了使它更具可讀性(在我的意見中),我使用結構特殊,技能和玩家。 這也適用於使用結構的prectice ..
請看一下我的代碼,這很簡單。
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);
這會創建一個名為charisma的新特殊對象,對吧? 那么為什么不能將它傳遞給一個新的技能對象呢?
最后一件事。 出於某種原因,我仍然不明白,但真的想知道,這是通過在聲明魅力時使用靜態來解決的,但是我無法通過輸入在我的表單類中更改它
player.charisma.value = 123;
問候!
編輯:
我剛剛發現了一些我無法解釋的東西。 而不是寫(產生錯誤)
public skills barter = new skills("Barter", charisma, 0);
我寫道:(玩家現在是班級)
public skills barter = new skills();
然后在玩家構造函數中,我可以像以下一樣設置易貨交易:
barter.spec = strength;
這為何如此逍遙法外? 這是不好的做法嗎? 好吧,我還是不會使用它,因為如果我改變玩家的特殊性,它不會在易貨中更新,因為我知道結構是通過值傳遞而不是參考。 但我的問題為什么我不能用結構初始化結構仍然存在。
首先,你定義的第一個結構是私有的,這很奇怪(除非它們嵌套在其他類型中)。
其次,你不能在結構中使用實例字段初始值設定項,所以基本上你的整個player
結構都是無效的,所以我不知道你是如何得到你描述的錯誤而沒有遇到這個問題。
無論如何,你應該使用類。
至於你的最后一個問題,靜態成員與類型相關聯,而不是與所述類型的實例相關聯,這就是為什么你不能為個別實例更改它們的原因。
Struct是VALUE TYPES ,這意味着您無法使用new關鍵字對它們進行實例化。 直接嘗試
public specials charisma = specials("CHARISMA", 0)
還有結帳: http : //msdn.microsoft.com/en-us/library/s1ax56ch.aspx希望這有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.