2012-11-11 25 views
1

,自從我建立一個物理的教學平臺,我需要知道的是行動的時刻物體上的總力。這樣,我可以繪製箭頭顯示這個合力,讓學生理解正在發生的事情。獲取力作用在物體上

我挖入Farseer的源頭,發現內部Vector2變量Force。由於它是內部的,因爲它們在不同的程序集中,所以我無法從我的教學平臺訪問它。

請問什麼壞事發生,如果我改變改性劑,讓我們說私人,並添加一個getter函數呢?

OR

有沒有更好的方式來獲得目前作用於物體的合力?

+2

如果因爲它是內部的,那麼你希望把它公開,而不是私人你不能訪問它。因爲你只是修改源代碼,你可能要見好就收變量獨自創建自己的屬性返回變量。 – TyCobb

回答

1

因爲它似乎可以訪問源,最簡單的方法揭露該變量是一個公共的getter添加到它所在的類。該類的一個實例將有權訪問內部變量。

EDIT:(由代碼示例)

它是所有關於哪裏訪問內部值的代碼是否存在。希望下面的例子能夠爲你說明這一點。假設您有兩個項目的解決方案,一個叫做ExternalAssembly,另一個叫MyApplication。 MyApplication引用了ExternalAssembly來訪問它的類。

項目: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); 
    } 
} 
+0

是不是集之外的「內部」變量無法訪問?我不應該改變修改器嗎? – Felastine

+0

我更新我的回答,希望該代碼將有助於你理解。 – nabrond