2015-10-13 35 views
0

我已經使用IKVM將java庫轉換爲在我的統一應用程序中使用的.dll。在統一的java庫中的C#中的內省

我怎樣寫這個Java線在C#:

ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); 


org.gephi.project.api.ProjectController pc = org.openide.util.Lookup.getDefault().lookup(org.gephi.project.api.ProjectController.class); 

反思似乎並沒有工作。當我參考ProjectController.class時,似乎存在一個問題

回答

0

.NET中運行時Java類的等價物是System.Type對象。有兩種方法可以獲得一個:在任何對象實例上調用GetType()(來自System.Object,所有事情都支持它)或使用the typeof operator

也許也只能使用原始類名,但我希望它希望它的Type對象。這將取決於IKVM如何實現Java反射;我真的不知道。

當然,你也可以使用.NET反射來完成整個事情。我不知道知道,因爲你使用了一些奇怪的非標準的Java反射類似的東西,但它看起來像只是試圖獲得「默認」實例一類...?

// I haven't tested this, but it may work: 
ProjectController pc = Lookup.getDefault().lookup(typeof(ProjectController)); 
// You could also just try it without the ".class" part (since "class" is reserved in C#): 
ProjectController pc = Lookup.getDefault().lookup(ProjectController); 
// Or, if you want the .NET reflection "proper" way to do what I *think* you're attempting: 
ProjectController pc = typeof(ProjectController).GetContructor(Type.EmptyTypes).Invoke(null); 
// Of course, that's just the same thing as this simple line, so I probably misunderstood: 
ProjectController pc = new ProjectController();