Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
This question was closed Apr 17, 2018 at 10:23 AM by haruna9x for the following reason:

The question is answered, right answer was accepted

avatar image
0
Question by haruna9x · Apr 15, 2018 at 09:39 AM · c#propertiesset

Property (set) does not work with reference c#.

I recently discovered that when I keep a reference to a property, then set it. set property has not been called. Does anyone know why?

 public class AttributeComponent : MonoBehaviour
     {
         [SerializeField]
         private bool isLinker;
         
         public AttributeDictionary AttributeDictionary
         {
             get { return attributeDictionary; }
             set
             {
                 Debug.Log("Set ");
 
                 if (attributeDictionary != value)
                 {
                     if (isLinker)
                     {
                         LinkerComponent linkerComponent = GetComponent<LinkerComponent>();
 
                         linkerComponent.RemoveAllLinker(attributeDictionary);
 
                         attributeDictionary = value;
 
                         attributeDictionary.CalculateValueOfAllAttribute();
 
                         linkerComponent.AddAllLinker(attributeDictionary);
                     }
                     else
                     {
                         attributeDictionary = value;
                         attributeDictionary.CalculateValueOfAllAttribute();
                     }
                 }
             }
         }
    }
      // This does not work.
      Attribute_Component = Character_Component.GetComponent<AttributeComponent>();
      AttributeDictionary attributeDictionary = Attribute_Component.AttributeDictionary;
      attributeDictionary = LoadAttribute(slot);

      // This work.
     Attribute_Component = Character_Component.GetComponent<AttributeComponent>();
     Attribute_Component.AttributeDictionary = LoadAttribute(slot);
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

  • Sort: 
avatar image
2
Best Answer

Answer by fafase · Apr 15, 2018 at 10:01 AM

   Attribute_Component = Character_Component.GetComponent<AttributeComponent>();

At this point above you have a reference to the script with the property.

   AttributeDictionary attributeDictionary = Attribute_Component.AttributeDictionary;

Above again, you have a reference (attributeDictionary) and you assign the return value of the property. At this point, using attributeDictionary is pointing to the object the property returns, but not the property itself.

   attributeDictionary = LoadAttribute(slot);

Finally, you are assigning a new value, that won't affect the property. That reference has no link to the property. If you want to trigger the property then call it directly. No other way since you cannot pass a property by reference. You could use a delegate that calls the property within, but that sounds like added complexity.

 public void Method(AttributeDictionary  ad){ AttributeDictionary = ad; } 

 Action<AttributeDictionary> action = Method;
 action(LoadAttribute(slot));


Comment
Add comment · Show 3 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image haruna9x · Apr 15, 2018 at 10:23 AM 0
Share

"attributeDictionary is pointing to the object the property returns, but not the property itself." - It must be the attributeDictionary variable of the AttributeComponent class, this variable has not been changed.

attributeDictionary = LoadAttribute(slot); did not do anything. Or I do not know.

avatar image fafase haruna9x · Apr 15, 2018 at 05:53 PM 0
Share

Let's do it one step at a time. You first assign the attributeDictionary that the property returned, whatever this one is, it has address 0x0011. So attributeDictionary has value 0x0011.

Now you call LoadAttribute which also returns an AttributeDictionary object, not the same as previous phase and this one has address 0x0022. So attributeDictionary has now value 0x0022, previous address is gone.

If you were to do this:

  AttributeDictionary attributeDictionary = Attribute_Component.AttributeDictionary;
  attributeDictionary.someVariable = someValue;

then yes you are affecting the one returned by the property. But that won't call the setter either. If you want the setter to be called, then you have to call it, there is no other way as you cannot pass a reference to a property. Just not how the compiler is built.

avatar image haruna9x fafase · Apr 16, 2018 at 12:01 AM 0
Share

Very clear. Thank you!

Follow this Question

Answers Answers and Comments

473 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

Are properties variables? 1 Answer

Update variables with C# properties in customeditor 2 Answers

Combining Lists 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges