2016-07-27 99 views
1

我有一個基本的類設置的項目,收到一些損害,並有一個健康狀況。但由於某些原因,我無法訪問基本變量,因爲我無法訪問錯誤。訪問基類變量無法訪問的錯誤

這是我的代碼設置:

public abstract class Items 
{ 

    public float health { get; private set; } 
    public Items() 
    { 
     health = 100f; 
    } 
} 

public class Sword : Items 
{ 
    public string name { get; private set; } 
    public float maxPower { get; private set; } 

    public Sword(string n float mPower) : base() 
    { 
     name = n; 
     maxPower = mPower; 

    } 

    public void UpdateDamage(float damageAmount) 
    { 
     health = Mathf.Clamp(health - damageAmount,0,100); 
    } 
} 

的錯誤是:

'Items.health' 不可訪問由於其保護級別

我推測,因爲我設置它公開我可以在我的損害方法訪問它,但我猜不是。我在哪裏錯了?

+1

@Dabe - 我還建議您在這裏閱讀[c#命名轉換](https://msdn.microsoft.com/en-us/library/ms229002(v = vs.110).aspx) –

回答

3

Items的setter從private更改爲protected。因爲它是一個private set只有該類可以將它設置爲非其他類,即使不是派生類。

  • 使派生類能夠將其設置爲protected set(如下所示)。
  • 爲了使任何人都可以將其設置(public)字去掉,只留 - 默認值是public

有關屬性的access modifierscheck MSDN

因此,更多的信息:

public abstract class Items 
{ 
    public float health { get; protected set; } 
    public Items() 
    { 
     health = 100f; 
    } 
} 
+0

啊那麼保護是什麼意思?我認爲保護意味着它不能改變。 – Sir

+0

@Dave - 剛剛添加了一些解釋 –

+0

謝謝,只是想知道 - 什麼是更好的做法 - 我目前的設置,或使用虛擬/覆蓋,並調用base.UpdateDamage(),同時保持健康的私人設置? – Sir