-7

設定しようとしている変数がありますが、設定しClass1.SetVariable(variable);た変数が返されません。Class2変数は、私が望む 50 ではなく、他の関数の 0 に等しくなります。何か案は?コード:

更新しました:

class Class1 {
    public int rndk = 0;

    public int Rndk {
        get { return this.rndk; }
        set { this.rndk = value; }
    }
}

class Class2 {
    public Class1 instance = new Class1();

    public Class2() {
        Load();
        Check();
    }

    public void Load() {
        instance.Rndk = 50;
        Console.WriteLine(instance.Rndk);
        // returns 50
    }

    public void Check() {
        Console.WriteLine(instance.Rndk);
        // returns 0
    }
}

それはほとんどコードです。

4

2 に答える 2

3

まず、C# では、通常、これを"set メソッド" を持つフィールドではなくプロパティにする方が適切です。

private int variable = 0;
public int Variable 
{ 
   get { return this.variable; }
   set { this.variable = value; }
}

これは基本的に 2 つの方法ですが、より優れた構文でラップされています。

実際の問題については、メソッドがClass1クラスの同じインスタンスで機能していないことが問題だと思います。変数で同じインスタンスを使用していることを確認し、Class1メソッド呼び出しごとに新しいインスタンスを作成しないようにしてください。(既存のコードは実際の問題を示していません。)

たとえば、上記の変更により、これは機能します。

public class Class2
{
    private Class1 instance1 = new Class1();

    public Class2()
    { 
        instance1.Variable = 50;
    }

    public void Print()
    {
         // Using the same instance - will print 50
        Console.WriteLine("Instance value is {0}", instance1.Variable);
    }
于 2012-12-06T21:31:37.397 に答える
1

「グローバル」になりたい場合はClass1、静的でなければなりません。

public static class Class1

于 2012-12-06T21:32:26.997 に答える