簡體   English   中英

c#:將struct對象傳遞給struct對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM