Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 /
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.

Follow this Question

Answers Answers and Comments

No one has followed this question yet.

Related Questions

Object reference not set... but... it is? 0 Answers

The infamous: Object Reference not set to an instance of an object 1 Answer

Instancing Objects.. 2 Answers

How do I apply drag rigidbody? 2 Answers

Serialization - Variables won't change on original construction 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