1

由于我正在构建物理教学平台,因此我需要知道此刻作用在物体上的总力。这样,我可以画出箭头来显示这种合力,让学生了解正在发生的事情。

我挖掘了 Farseer 的源代码,发现了内部 Vector2 变量Force。由于它是内部的,我无法从我的教学平台访问它,因为它们位于不同的组件中。

如果我将修饰符更改为私有,并为其添加一个 getter 函数,会发生什么不好的事情吗?

或者

有没有更好的方法来获得当前作用在物体上的合力?

4

1 回答 1

1

由于您似乎可以访问源代码,因此公开该变量的最简单方法是将公共 getter 添加到它所在的类中。该类的实例将有权访问内部变量。

编辑:(添加代码示例)

这完全是关于访问内部值的代码存在的位置。希望下面的示例将为您说明这一点。假设您有一个包含两个项目的解决方案,一个名为 ExternalAssembly,另一个名为 MyApplication。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; }
        }
    }
}    

项目:我的应用程序

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 回答