2013-09-27 142 views
4

好日子所有訪問一個看似公共財產,通過反射

我很努力,以確定哪些是有企圖的一類訪問公共財產的問題。

我的需求非常基礎。我有一個在我的例程中正確實例化的公共類,我知道,由於反射器,這個類有一個屬性,我需要引用。

問題是,該場所被定義爲這樣的:

public Vector3 root { 
    [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; 
    [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; 
} 

我面對的問題是,我所有的企圖獲取屬性只會失敗。 我實例化的類型,並與結合標誌

Type vtype = myobj.getType() 
PropertyInfo[] vproperties; 
vproperties = vtype.GetProperties();//(BindingFlags.Default | BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.NonPublic); 
for (int vpropertycounter =0 ; vpropertycounter < vproperties.Length ; vpropertycounter++) { 
    Console.write(varbodyproperties[varpropertycounter].Name); <= 'root' never appears in this list 
} 

我的懷疑和疑問圍繞着一個事實,即root屬性可能不是「分享」,因爲它的getter和setter是「wrapperless的所有可能的組合嘗試'和'內部'。 可悲的是,我不知道這是否可以克服。

我想知道這個屬性是否可以通過任何方式訪問,並可能如何做到這一點。

歡迎任何反饋。

在此先感謝。

注意:直接尋址屬性,如在「myobj.root」中爲未知屬性生成編譯器錯誤。

回答

1

MethodImplOptions.InternalCall的方法通常是內部框架方法。你不能直接或通過反思(這或多或少是同一件事)來打電話給他們。

這取決於圖書館,我發現這樣的內部使用VB的Word API內的東西。要訪問變異屬性,你必須調用一個setter方法例如

Property = "" <- doesn't work 
set_Property("") <- works 

的API取決於你試圖訪問我想,如果這些繼任者實施

除此之外,也許閱讀Platform Invoke Tutorial

+0

感謝您的建議,我意識到我實際上可以調用setter和getter,這使我明白我正在使用錯誤的類型進行反射迭代! – roamcel