TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

<< Back to C-SHARP

C# Parameter Passing, ref and out

Use parameters with the ref and out modifiers. Compare ref and out.
Parameters. Ref and out change the behavior of method parameters. Sometimes we want the actual value of a variable to be copied as the parameter.
Other times we want a reference. These modifiers (ref and out) affect definite assignment analysis. They are governed by specific rules.RefOut
An example. This program introduces 3 methods. Example1 uses the default parameter passing technique. Example2 uses the ref modifier. And Example3 employs the out modifier.

Next: We pass the local int val to each of these 3 methods and examine the results.

Int, uint

Example 1: This code uses value-passing semantics. If it assigns the parameter, it only affects the local state of the method.

Example 2: This code uses ref. When this method sets its parameter to 2, this is reflected in the calling location (Main).

Example 3: This code uses out on its parameter. It sets its parameter to 3—this is reflected in the calling location.

C# program that demonstrates parameter passing using System; class Program { static void Main() { int val = 0; Example1(val); Console.WriteLine(val); // Still 0. Example2(ref val); Console.WriteLine(val); // Now 2. Example3(out val); Console.WriteLine(val); // Now 3. } static void Example1(int value) { value = 1; } static void Example2(ref int value) { value = 2; } static void Example3(out int value) { value = 3; } } Output 0 2 3
Arguments, parameters. Arguments are values that are passed to a specific method call. You can call a method with many different arguments, as many times as you wish.

Name: The name of the argument variables (if any) does not affect the behavior of the method.

Program 1: C# using System; class Program { static void Main() { // Argument = 5 // Argument = Sam Perls(5, "Sam"); } static void Perls(int id, string name) { Console.WriteLine(id); Console.WriteLine(name); } } Output 5 Sam
Parameters, continued. Formal parameters are found in the method itself. The names they use are not affected by the argument names.

And: When the arguments are passed to the method, they are received as formal parameters.

Program 2: C# using System; class Program { static void Main() { Perls(5, "Sam"); } static void Perls(int id, string name) { // Parameter = id // Parameter = name Console.WriteLine(id); Console.WriteLine(name); } } Output 5 Sam
Ref, out. What is the difference between ref and out? The difference is in the compiler's application of the definite assignment analysis step.

Important: The compiler demands that an out parameter be "definitely assigned" before any exit. There is no such restriction with the ref.

Definite: When a method uses the out modifier, you can be sure that after you invoke it, your variable is definitely assigned.

And: This means you can write code that does not assign the variable before calling an out method.

References. References are values. They are both represented by a series of bytes that are stored together. But references point to somewhere in memory.

Further: The compiler enforces rules on references. These avoid type safety issues and ensure your program doesn't do anything horrible.

Black-box abstractions. In the Structure and Interpretation of Computer Programs, procedures are described as black-box abstractions. Procedures do a specific task.

Info: Formal parameters are important because their names do not matter. They are not affected by other names in the program.

So: Procedures become good black-box abstractions. We can modify and work on them independently of other parts of the program.

Abstractions, continued. Formal parameters are bound variables—they have meaning only within a function. Free variables could conflict and create ambiguous meanings. See pages 26-29.

Review: Arguments are specific values passed to a method. Parameters are the variables where those values are received.

And: This disconnect provides a high level of abstraction, useful for developing complex yet understandable computer programs.

A summary. The C# language has strict rules regarding the passing of parameters by value and by reference. The default is to pass all parameters (even references) by value.
The best choice. Out is often preferred to ref. It ensures that you can avoid assigning the variable before passing it as an argument.
© TheDeveloperBlog.com
The Dev Codes

Related Links:


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf