• 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 /
avatar image
2
Question by Jordii · Feb 01, 2011 at 11:07 AM · objectinstanceref

Something I don't fully understand about C# - the ref modifier

C# has a ref parameter which basically allows you to refer to a value passed on via a method. This can be useful for primary types such as int and string. However, is there any usage to use ref when passing instances of objects? They seem to be references by themselves in C# (just like in Java, JS and AS3)

Considder the following code:

 public class NewBehaviourScript : MonoBehaviour 
 {
     void Start () 
     {
         TestObject testObject = new TestObject();
         testObject.setName("Foobar");
         Debug.Log(testObject.getName()); // prints Foobar
         changeTheName(testObject);
         Debug.Log(testObject.getName()); // prints FoobarChanged
     }
 
     public void changeTheName(TestObject testObjectViaMethod)
     {
         testObjectViaMethod.setName("FoobarChanged");
     }    
 }

As expected this does modify testObject, therefore doesn't make a local copy/saves memory allocation.

But I'm still wondering whether there is any use to use ref with instances of objects :)

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

2 Replies

· Add your reply
  • Sort: 
avatar image
5
Best Answer

Answer by Jesse Anders · Feb 01, 2011 at 12:05 PM

You've probably already gotten the answers you need (the article linked in the other answer is pretty comprehensive, I think), but yes, you can pass an object reference by reference, and it's conceptually distinct from passing the object reference itself.

If you've ever programmed in C or C++, a reference to a reference in C# is somewhat similar to a pointer to a pointer ('**') in C or C++. In other words, it allows you to modify the value of the reference itself, rather than the object to which the reference refers.

As I understand it at least, all function arguments are passed by value in C# unless otherwise specified (e.g. using the 'ref' keyword). When you pass a reference to an object of a class type, you're actually passing a reference to that object by value.

You would pass an object reference by reference if you actually wanted to change the value of the original reference (yes, it's a little confusing). Note that both 'ref' and 'out' can be used for this, although the two keywords work in somewhat different ways.

Comment
Add comment · 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
2

Answer by _MGB_ · Feb 01, 2011 at 11:22 AM

The use of refs is mainly to pass to functions that expect them :)

This page has some great information.

Comment
Add comment · 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

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

No one has followed this question yet.

Related Questions

InstanceID Changing When Game Start 1 Answer

How to instantiate object onto other object from script 1 Answer

object not set to instance? 1 Answer

Script decides not to run anymore 1 Answer

object not set to instance..........again. 2 Answers


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