# managedReferenceValue

> The object assigned to a field with SerializeReference attribute.

## Definition

* **Type:** Property
* **Namespace:** [UnityEditor](/engine/6000.5/script-reference/unityeditor.md)
* **Assembly:** UnityEditor.CoreModule

```csharp
public object managedReferenceValue { get; set; }
```

### Remarks

For use when [SerializedProperty.propertyType](/engine/6000.5/script-reference/unityeditor/serializedproperty/propertytype.md) is [SerializedPropertyType.ManagedReference](/engine/6000.5/script-reference/unityeditor/serializedpropertytype/managedreference.md).

The value object must be a type that is compatible with the base type of the managed reference field (that is, the managed reference field that the serialized property is referencing).

Additional Resources: [SerializeReference](/engine/6000.5/script-reference/unityengine/serializereference.md), [SerializedProperty.propertyType](/engine/6000.5/script-reference/unityeditor/serializedproperty/propertytype.md), [SerializedPropertyType.ManagedReference](/engine/6000.5/script-reference/unityeditor/serializedpropertytype/managedreference.md).

### Examples

```csharp
using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using Object = UnityEngine.Object;

public class SerializedPropertyManagedReferenceValueExample : ScriptableObject
{
    [Serializable]
    public class Item
    {
        public int m_data = 1;

        public int DoCalculation()
        {
            // Could be querying some external data, or other calculation that cannot be
            // made entirely based on the local object state
            m_data++;
            return m_data * 2;
        }
    }

    [SerializeReference]
    public Item m_Item;

    [MenuItem("Example/SerializedProperty ManagedReferenceValue Example1")]
    static void TestMethod1()
    {
        var scriptableObject = ScriptableObject.CreateInstance<SerializedPropertyManagedReferenceValueExample>();
        var serializedObject = new SerializedObject(scriptableObject);

        // Allocate and assign an object to the m_Item field via managedReferenceValue
        var referenceProperty = serializedObject.FindProperty("m_Item");
        referenceProperty.managedReferenceValue = new Item();

        // Change a value of the object's field
        referenceProperty.FindPropertyRelative("m_data").intValue = 99;

        // Apply the change back to the "live" object
        serializedObject.ApplyModifiedProperties();

        // Will print "Value of m_data: 99"
        Debug.Log("Value of m_data: " + scriptableObject.m_Item.m_data);
    }

    [MenuItem("Example/SerializedProperty ManagedReferenceValue Example2")]
    static void TestMethod2()
    {
        var scriptableObject = ScriptableObject.CreateInstance<SerializedPropertyManagedReferenceValueExample>();
        scriptableObject.m_Item = new Item();

        var serializedObject = new SerializedObject(scriptableObject);
        var referenceProperty = serializedObject.FindProperty("m_Item");

        // The "live" referenced object can be accessed so we can call a method on it
        (referenceProperty.managedReferenceValue as Item).DoCalculation();

        // The serialized state inside the SerializedObject is now out of data with the change
        // of m_data on the live object, but can be brought back in sync by calling Update()
        var serializedDataValue = serializedObject.FindProperty("m_Item.m_data").intValue;
        serializedObject.Update();
        var updatedSerializedDataValue = serializedObject.FindProperty("m_Item.m_data").intValue;

        // Will print: "Value of m_data before update: 1 and after update: 2"
        Debug.Log("Value of m_data before update: " + serializedDataValue + " and after update: " + updatedSerializedDataValue);
    }
}
```
