1

私は物理学の教育用プラットフォームを構築しているので、その時点で物体に作用している力の合計を知る必要があります。このようにして、学生が何が起こっているのかを理解できるように、この合力を示す矢印を描くことができます。

Farseer のソースを掘り下げたところ、Vector2 の内部変数Forceが見つかりました。内部であるため、異なるアセンブリにあるため、教育プラットフォームからアクセスできません。

修飾子を private に変更して getter 関数を追加すると、何か悪いことが起こりますか?

また

オブジェクトに現在作用している合力を取得するより良い方法はありますか?

4

1 に答える 1

1

ソースにアクセスできるように見えるので、その変数を公開する最も簡単な方法は、その変数が存在するクラスに public getter を追加することです。そのクラスのインスタンスは、内部変数にアクセスできます。

EDIT:(コード例を追加)

内部値にアクセスするコードがどこに存在するかがすべてです。以下の例でこれを説明していただければ幸いです。1 つは ExternalAssembly と呼ばれ、もう 1 つは MyApplication と呼ばれる 2 つのプロジェクトを含むソリューションがあるとします。MyApplication には、そのクラスにアクセスするための ExternalAssembly への参照があります。

プロジェクト: 外部アセンブリ

namespace ExternalAssembly
{
    public class MyClass 
    {
        internal string hiddenString;

        public MyClass() 
        {
            this.hiddenString = "This is my value.";
        }

        public string Exposed
        {
            get { return this.hiddenString; }
        }
    }

    public class MyClass2
    {
        private MyClass classInstance;

        public MyClass2()
        {
            this.classInstance = new MyClass();
        }

        public string Exposed2 
        {
            get { return this.classInstance.hiddenString; }
        }
    }
}    

プロジェクト: MyApplication

namespace MyApplication
{
    using ExternalAssembly;

    public class CallInternalTest() 
    {
        MyClass classInstance = new MyClass();
        MyClass2 class2Instance = new MyClass2();

        // this will fail since hiddenString is an internal variable
        Console.WriteLine(classInstance.hiddenString);

        // this will succeed since Exposed is a public member
        Console.WriteLine(classInstance.Exposed);

        // this will also succeed since Exposed2 is a public member
        Console.WriteLine(class2Instance.Exposed2);
    }
}
于 2012-11-11T12:40:54.413 に答える