-2

私の問題は、値を更新して処理する「クラスA」を1つ作成することです。「クラスB」は「クラスA」内に作成され、クラスAの値を読み取る必要があります。

これで、クラスAの値を次のように作成できます。

public static int AInt { get { return aInt; } }
static int aInt;

そして、A.AIntとしてB内でそれらにアクセスします。

ただし、ポインターを使用することはできますが、これは非常に反c#のようです。

public class A
{
    int aInt;

    unsafe public A()
    {
        fixed(int *aPtr = &aInt)
        B b = new B(aPtr);
    }

    // Changes aInt
}

unsafe public class B
{
    int *bInt;

    public B(int *a)
    {
        bInt = a;
    }

    // Does stuff according to bInt value changes
}

値の更新メソッドを明示的に呼び出さずに、あるクラスの値を別のクラスに提供するためのより良いアプローチについて、私は少し混乱しています。最初の例はそれがどのように行われるべきかということだと思いますが、私はC ++のバックグラウンドを持っているので、ポインターが私にとっての標準です。

コンパイルフラグを変更し、fixed()を使用して変数を変更し、メソッド/クラスを安全でないものとしてマークする必要があるため、c#ではポインターを実行するのが面倒に思えます。

より良い解決策のためのガイダンス/ヒントをありがとう。

4

3 に答える 3

2

Aオブジェクト内の特定のプロパティではなく、オブジェクト全体への参照を渡す必要があります。

public class A
{
    public int aInt;

    public A()
    {
        B b = new B(this);
    }

    // Changes aInt
}

public class B
{
    A _a;

    public B(A a)
    {
        _a = a;
    }

    // can use _a.aInt here
}

または、でイベントを作成し、でAそのイベントをサブスクライブしますB

于 2013-03-03T15:56:53.920 に答える
1

お気づきのように、これを行う方法はたくさんあります。が静的変数のままである場合aInt(読み取り:静的型ではなく、変更されないことを意味します)、コンストラクターまたはプロパティを介してBに渡すか、オブジェクト全体をBに渡すことができます。

B b = new B(this.aInt); //this is A

また

B b = new B(this); //this is A

aIntが変更され、Bに通知が届くと予想される場合は、Aでイベントを作成し、Bでサブスクライブできます。

aIntが異なると予想するが、BにAからaIntをポーリングさせる場合は、FuncデリゲートをBに渡して、そのFuncにaIntを返させることができます。

于 2013-03-03T15:57:05.887 に答える
1

クラスB内で何をしたいかはわかりませんが、最終的には単純な拡張クラスで十分です。

public class A
{
    int aInt;

    public A()
    {
        aInt = 1;
        aInt = aInt.DoSomething();
        // aInt is now 6
    }
}

public static class Extension
{
    public static int DoSomething (this int value)
    {
        return value += 5;
    }
}
于 2013-03-03T16:04:41.037 に答える