Csharp/CSharp Tutorial/Class/Method Parameter
Содержание
- 1 A member function with two arguments
- 2 C# Parameter Modifiers
- 3 Creating a method with a reference argument.
- 4 How Arguments Are Passed
- 5 Method parameter hides the class member field
- 6 Parameter modifiers
- 7 params int[] args
- 8 Pass integer by ref
- 9 Pass integer value by value
- 10 Pass int value to a function
- 11 Pass int without "out" and "ref"
- 12 ref parameters
- 13 Use a parameter in a member function
- 14 use of "outer variable" in anonymous method
- 15 Use out for int type
- 16 Variable arguments to a method in C#.
A member function with two arguments
<source lang="csharp">using System;
class ChkNum {
public int sum(int a, int b) { int max; max = a < b ? a : b; return max; }
}
class MainClass {
public static void Main() { ChkNum ob = new ChkNum(); int a, b; a = 7; b = 8; Console.WriteLine(ob.sum(a, b)); a = 100; b = 8; Console.WriteLine(ob.sum(a, b)); a = 100; b = 75; Console.WriteLine(ob.sum(a, b)); }
}</source>
7 8 75
C# Parameter Modifiers
<source lang="csharp">Parameter Modifier Meaning in Life (none) Assumed to be passed by value. out Output parameters are assigned. params send in a variable number of arguments as a single logical parameter. ref The value is initially assigned by the caller, and may be optionally reassigned by the called method.</source>
Creating a method with a reference argument.
<source lang="csharp">using System; class MainClass {
static void Main() { int x = 10; Console.WriteLine("Before calling non-ref function, x = {0}", x); NonRefFunction(x); Console.WriteLine("After calling non-ref function, x = {0}", x); RefFunction(ref x); Console.WriteLine("After calling ref function, x = {0}", x); } static void NonRefFunction(int x) { Console.WriteLine("Top of NonRefFunction. X = {0}", x); x = x + 10; Console.WriteLine("Bottom of NonRefFunction. X = {0}", x); } static void RefFunction(ref int x) { Console.WriteLine("Top of RefFunction. X = {0}", x); x = x + 10; Console.WriteLine("Bottom of RefFunction. X = {0}", x); }
}</source>
How Arguments Are Passed
Call-by-value:
- Copy the value of an argument into the formal parameter.
- Change made to the parameter have no effect on the argument used in the call .
Call-by-reference.
- A reference to an argument is passed to the parameter.
- Change made to the parameter will affect the argument used to call the subroutine.
When you pass a value type, such as int or double, to a method, it is passed by value.
An object is passed by reference
7.6.Method Parameter 7.6.1. How Arguments Are Passed 7.6.2. <A href="/Tutorial/CSharp/0140__Class/Parametermodifiers.htm">Parameter modifiers</a> 7.6.3. <A href="/Tutorial/CSharp/0140__Class/Passintvaluetoafunction.htm">Pass int value to a function</a> 7.6.4. <A href="/Tutorial/CSharp/0140__Class/Useaparameterinamemberfunction.htm">Use a parameter in a member function</a> 7.6.5. <A href="/Tutorial/CSharp/0140__Class/Amemberfunctionwithtwoarguments.htm">A member function with two arguments</a> 7.6.6. <A href="/Tutorial/CSharp/0140__Class/Passintwithoutoutandref.htm">Pass int without "out" and "ref"</a> 7.6.7. <A href="/Tutorial/CSharp/0140__Class/Passintegerbyref.htm">Pass integer by ref</a> 7.6.8. <A href="/Tutorial/CSharp/0140__Class/refparameters.htm">ref parameters</a> 7.6.9. <A href="/Tutorial/CSharp/0140__Class/Passintegervaluebyvalue.htm">Pass integer value by value</a> 7.6.10. <A href="/Tutorial/CSharp/0140__Class/paramsintargs.htm">params int[] args</a> 7.6.11. <A href="/Tutorial/CSharp/0140__Class/Useoutforinttype.htm">Use out for int type</a> 7.6.12. <A href="/Tutorial/CSharp/0140__Class/Creatingamethodwithareferenceargument.htm">Creating a method with a reference argument.</a> 7.6.13. <A href="/Tutorial/CSharp/0140__Class/VariableargumentstoamethodinC.htm">Variable arguments to a method in C#.</a> 7.6.14. <A href="/Tutorial/CSharp/0140__Class/Methodparameterhidestheclassmemberfield.htm">Method parameter hides the class member field</a> 7.6.15. <A href="/Tutorial/CSharp/0140__Class/CParameterModifiers.htm">C# Parameter Modifiers</a> 7.6.16. <A href="/Tutorial/CSharp/0140__Class/useofoutervariableinanonymousmethod.htm">use of "outer variable" in anonymous method</a>
Method parameter hides the class member field
<source lang="csharp">public class Product {
public int yearBuilt; public double maximumSpeed; public int Age(int currentYear) { int maximumSpeed = 100; // hides the field System.Console.WriteLine("In Age(): maximumSpeed = " + maximumSpeed); int age = currentYear - yearBuilt; return age; } public double Distance(double initialSpeed, double time) { System.Console.WriteLine("In Distance(): maximumSpeed = " + maximumSpeed); return (initialSpeed + maximumSpeed) / 2 * time; }
}
class MainClass{
public static void Main() { Product redPorsche = new Product(); redPorsche.yearBuilt = 2000; redPorsche.maximumSpeed = 150; int age = redPorsche.Age(2001); System.Console.WriteLine("redPorsche is " + age + " year old."); System.Console.WriteLine("redPorsche travels " + redPorsche.Distance(31, .25) + " miles."); }
}</source>
Parameter modifiers
<source lang="csharp">Parameter modifier Passed by Variable must be definitely assigned None Value Going in ref Reference Going in out Reference Going out</source>
params int[] args
<source lang="csharp">using System; class MainClass {
static void Main(string[] args) { MyMethod(5,5,5,5); } static public void MyMethod(params int[] args) { for (int I = 0; I < args.Length; I++) Console.WriteLine(args[I]); }
}</source>
5 5 5 5
Pass integer by ref
<source lang="csharp">using System; class MainClass {
static void Main(string[] args) { int MyInt = 5; MyMethodRef(ref MyInt); Console.WriteLine(MyInt); } static public int MyMethodRef(ref int myInt) { myInt = myInt + myInt; return myInt; }
}</source>
10
Pass integer value by value
<source lang="csharp">using System; class MainClass {
static void Main(string[] args) { int MyInt = 5; MyMethod( MyInt); Console.WriteLine(MyInt); } static public int MyMethod( int myInt) { myInt = myInt + myInt; return myInt; }
}</source>
5
Pass int value to a function
<source lang="csharp">using System; class MainClass {
public static void Main() { int SomeInt = 6; int s = Sum(5, SomeInt); Console.WriteLine(s); } public static int Sum(int x, int y) // Declare the method. { return x + y; // Return the sum. }
}</source>
11
Pass int without "out" and "ref"
<source lang="csharp">using System; class MyClass {
public int Val = 20;
} class MainClass {
static void MyMethod(MyClass myObject, int intValue) { myObject.Val = myObject.Val + 5; intValue = intValue + 5; } static void Main() { MyClass myObject = new MyClass(); int intValue = 10; Console.WriteLine("Before -- myObject.Val: {0}, intValue: {1}", myObject.Val, intValue); MyMethod(myObject, intValue); Console.WriteLine("After -- myObject.Val: {0}, intValue: {1}", myObject.Val, intValue); }
}</source>
Before -- myObject.Val: 20, intValue: 10 After -- myObject.Val: 25, intValue: 10
ref parameters
<source lang="csharp">using System; class Color {
public Color() { this.red = 0; this.green = 127; this.blue = 255; } protected int red; protected int green; protected int blue; public void GetRGB( ref int red, ref int green, ref int blue) { red = this.red; green = this.green; blue = this.blue; }
} class Class1 {
static void Main(string[] args) { Color c = new Color(); int red = 1; int green = 2; int blue = 3; c.GetRGB(ref red, ref green, ref blue); Console.WriteLine("R={0}, G={1}, B={2}", red, green, blue); }
}</source>
Use a parameter in a member function
<source lang="csharp">using System;
class ChkNum {
// Return true if x is prime. public bool isPrime(int x) { for(int i=2; i <= x/i; i++) if((x %i) == 0) return false; return true; }
}
class MainClass {
public static void Main() { ChkNum ob = new ChkNum(); for(int i=1; i < 10; i++) if(ob.isPrime(i)) Console.WriteLine(i + " is prime."); else Console.WriteLine(i + " is not prime."); }
}</source>
1 is prime. 2 is prime. 3 is prime. 4 is not prime. 5 is prime. 6 is not prime. 7 is prime. 8 is not prime. 9 is not prime.
use of "outer variable" in anonymous method
<source lang="csharp">using System; using System.Collections.Generic; using System.Text;
class Program { delegate void MessagePrintDelegate(string msg); static void Main(string[] args) { string source = "Outer"; MessagePrintDelegate mpd3 = delegate(string msg) { Console.WriteLine("[{0}] {1}", source, msg); }; LongRunningMethod(mpd3); } static void LongRunningMethod(MessagePrintDelegate mpd) { for (int i = 0; i < 99; i++) { if (i % 25 == 0) { mpd(string.Format("Progress Made. {0}% complete.", i)); } } } static void PrintMessage(string msg) { Console.WriteLine("[PrintMessage] {0}", msg); } }</source>
Use out for int type
<source lang="csharp">using System; class MyClass {
public int Val = 20;
} class MainClass {
static void MyMethod(out MyClass f1, out int f2) { f1 = new MyClass(); f1.Val = 25; f2 = 15; } static void Main() { MyClass myObject = null; int intValue; MyMethod(out myObject, out intValue); Console.WriteLine("After -- myObject.Val: {0}, intValue: {1}", myObject.Val, intValue); }
}</source>
After -- myObject.Val: 25, intValue: 15
Variable arguments to a method in C#.
<source lang="csharp">using System; class MainClass {
public static void PrintParams(params object[] list) { for (int i = 0; i < list.Length; ++i) Console.WriteLine("Object {0} = {1} ({2})", i, list[i], list[i].GetType()); } public static void Main() { PrintParams(1, 2, "a", "b", 23.4); }
}</source>