2016-05-30 10 views
0

私は初心者のプログラマーですので、これは本当にばかげた質問です。あるクラスから別のクラスに値を渡す必要があります。私が間違っていないなら、これは継承によって行われますが、私が紛失しているものがあるようです。どんな助けも歓迎されるでしょう。私はUnity内でC#で書いています。継承 - ガイダンスが必要

public class baseStats{ 
    private int STAMINA; 

    public static int Stamina{ 
     get{return STAMINA;} 
     set{STAMINA = value;} 
    } 
} 

上記は私の親クラスのサンプルです。ここに私の子クラスである:

public class Profile : baseStats { 

    private static int PROFILE_STAMINA; 

    private void Stats() 
    { 
    PROFILE_STAMINA = Stamina; 

    } 

    public static int profileStamina 
    { 
    get{return PROFILE_STAMINA;} 
    } 

} 

私は、デバッグの目的で作成された第三のスクリプトでは、私が書いた:

public class debug:MonoBehaviour{ 
     void Start(){ 
      Debug.Log(Profile.profileStamina.ToString()); 
    } 
} 

それは私が非静的フィールド、メソッドのオブジェクト参照を必要とすると言います、またはプロパティー 'Profile.Profile.Stamina'。簡単な修正:すべての静的なものを作る(私は静的なものを使うのを避けるためにコンストラクタやそのようなものを作る必要があると信じています。エラーがなくなると、私はプログラムを実行し、コンソールのスタミナに0を出力します。私は本当に何が起こっているのか混乱しています。申し訳ありませんが、このような長い投稿です。

+1

3番目のスクリプトの 'profileStamina'はどのように定義されていますか?コードを更新してください。他の人と同じように、完全な3番目のスクリプトを用意してください。 – Programmer

+0

これは完全なスクリプトです。 http://imgur.com/tasBn6r –

+0

画像に 'Profile.profileStamina'があります。なぜそれであなたの質問を更新しないでください。人々からの不必要な質問を避けるために、あなたのIDEから直接SOのコードをコピーするのは良いことです。また、あなたの 'Profile'スクリプトは質問に含まれていません。私は人々がこれなしでどのように助けることができるか分かりません。ここの他のコードがIDEのコードと同じであることを確認してください。 – Programmer

答えて

1

あるクラスから別のクラスに値を渡す必要があります。私が と誤解していない場合、これは継承によって行われます。

いいえ、あるクラスから別のクラスに値を渡す必要はありません。継承がわからない場合は、それを使用しないでください。それはあなたがそれを必要としない可能性が非常に高いです。同じことがstaticキーワードに適用されます。新しいプログラマは、newキーワードが何のために使われているのかわからないときに、すべてをstaticにする傾向があります。

Profileコンストラクタスクリプト内にStatsスクリプトの新しいインスタンスを作成するだけです。 Profileスクリプトを使用するには、Statsスクリプトの新しいインスタンスを作成するコンストラクタを自動的に呼び出す新しいインスタンスを作成します。静的な変数や関数を使ってはいけません。全く必要ありません。値は、自動プロパティまたは関数で別のスクリプトに渡すことができますが、私の解決方法では、自動プロパティを使用して単純化しています。

public class Stats 
{ 
    private int STAMINA; 

    public int Stamina 
    { 
     get { return STAMINA; } 
     set { STAMINA = value; } 
    } 
} 

public class Profile 
{ 
    private Stats stats; 
    private int PROFILE_STAMINA; 

    //Init only 
    public Profile() 
    { 
     stats = new Stats(); 
    } 

    //Init with Stats stamina and profileStamina stamina values 
    public Profile(int stamina, int profileStamina) 
    { 
     stats = new Stats(); 
     stats.Stamina = stamina; 
     PROFILE_STAMINA = profileStamina; 
    } 

    //Stamina From Profile 
    public int profileStamina 
    { 
     get { return PROFILE_STAMINA; } 
     set { PROFILE_STAMINA = value; } 
    } 

    //Stamina From Stats 
    public int Stamina 
    { 
     get { return stats.Stamina; } 
     set { stats.Stamina = value; } 
    } 
} 

使用法:

public class debug:MonoBehaviour{ 
Profile profile = null; 

void Start() 
{ 

    //Creata new profile and set Stats stamina and ProfileStamina stamina values 
    profile = new Profile(10, 5); 
    profile.Stamina = 60; 
    profile.profileStamina = 60; 
    Debug.Log(profile.profileStamina.ToString()); 
} 

も時間がかかると、PropertiesClassesを学びます。

+0

時間を割いて洞察力のある回答を書こうとしていただき、ありがとうございます。これは非常に役に立ちます。 –

+0

@TimothyWhiteようこそ。私が投稿したリンクを訪問することを忘れないでください。あなたはクラスのインスタンスを作成する方法について学ぶ必要があります。ハッピーコーディング! – Programmer

0

静的でないプロパティにアクセスしようとしています。

public static int Stamina{ 
    get{return STAMINA;} 
    set{STAMINA = value;} 
} 

STAMINAprivate int STAMINAのように定義される:

このコードは、主な問題です。静的ではありません。これは、タイプbaseStatsのすべてのオブジェクトの内部には、STAMINAというintがあります。ただし、にはオブジェクトがありません。;あなたは、を実行することができる何かである静的関数に入っています。オブジェクトがありません。オブジェクトがないので、STAMINA intもありません。そのプロパティを取得または入力するオブジェクトはありませんにあります。

あなたの関数profileStats()にも同じ問題があります。何もオブジェクトを持たずに、非スタティックなSTAMINAにもアクセスしようとします。 STAMINAの単なる説明は実際にはthis.STAMINAになり、静的な内部にはthisはありません。

この設定全体の目的はわかりません。個人的には、そのようなグローバルデータを含む静的統計を使用しないでください。代わりに、必要なプロパティを含むオブジェクトを保持するだけで、その中のデータにアクセスする必要がある関数に渡されます。しかし、とにかく、私が見ることのできるところから、staticをその上に置くのを忘れただけです。private int STAMINA

サイドノート:これは継承とはまったく関係ありません。 Staminaは静的なpublicプロパティであり、静的な継承されていないジェネリックの特殊なケースを除き、静的なものは継承できないため、STAMINAの代わりにbaseStats.Staminaを参照する限り、親クラスは親クラスである必要はありません。 。これは、両方ともクラスを静的にすることで簡単に表示できます。

+0

ありがとうございました。私はあなたの指示に従ってコードを修正します。 –

関連する問題