簡體   English   中英

如何緩存 FieldInfo.GetValue()?

[英]How do I cache FieldInfo.GetValue()?

好的,所以我制作了一個 class 來獲取輸入腳本和屬性名稱。 它找到屬性,然后在調用 Display() 時顯示它[顯示方法被子 class 覆蓋]。 但是,我遇到了一個問題,那就是如何緩存 FieldInfo.GetValue() 返回的內容? 一旦找到包含我需要的變量的變量,最好有一個指針或其他東西可以重用,因為反射是昂貴的。

public class PropertyDisplayer : MonoBehaviour
    {
        public string PropertyName;
        public Object TargetObject;

        public object _TargetObject;
        public FieldInfo Property;

        void Start()
        {
            _TargetObject = TargetObject;

            if (!PropertyName.Contains("."))
            {
                Property = _TargetObject.GetType().GetField(PropertyName);
            }
            else
            {
                string[] split = PropertyName.Split('.');

                Property = _TargetObject.GetType().GetField(split[0]);

                for (int i = 1; i != split.Length; i++)
                {
                    _TargetObject = Property.GetValue(_TargetObject);
                    Property = Property.FieldType.GetField(split[i]);
                }
            }
        }

        public virtual void Display()
        {

        }
    }

使用 dynamitey 庫,它將為您透明地緩存所有反射調用,並使它們接近正常調用速度。 更多信息在這里: https://github.com/ekonbenefits/dynamitey

您可以將 FieldInfo.GetValue() 調用的結果存儲在“對象”類型的新成員字段中。 (這實際上是一個指針)

然后,在您的 Display() 覆蓋中,只需將此成員強制轉換為適當的 class,以便訪問其成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM