Csharp/C Sharp/Language Basics/Function Parameters
Версия от 15:31, 26 мая 2010; (обсуждение)
Содержание
Arrays as Function Returns and Parameters
using System;
public class Starter {
public static void Main() {
int[] zArray = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
string[] xArray = { "a", "b", "c", "d" };
Console.WriteLine("List Numbers");
MyClass.ListArray(zArray);
Console.WriteLine("List Letters");
MyClass.ListArray(xArray);
Console.WriteLine("Total Numbers");
MyClass.Total(zArray);
}
}
public class MyClass {
public static void ListArray(Array a) {
foreach (object element in a) {
Console.WriteLine(element);
}
}
public static void Total(int[] iArray) {
int total = 0;
foreach (int number in iArray) {
total += number;
}
Console.WriteLine(total);
}
}
creates instances of a value and a reference type
using System;
class Starter {
static void Main() {
int localvalue = 5;
MyClass objZ = new MyClass();
DisplayType(localvalue);
DisplayType(objZ);
}
static void DisplayType(object parameterObject) {
Type parameterType = parameterObject.GetType();
string name = parameterType.Name;
Console.WriteLine("Type is " + name);
if (name == "MyClass") {
((MyClass)parameterObject).Display();
}
}
}
class MyClass {
public void Display() {
Console.WriteLine("MyClass::Display");
}
}
Passing parameters to methods
using System;
class ParameterTest {
static void SomeFunction(int[] ints, int i) {
ints[0] = 100;
i = 100;
}
public static void Main() {
int i = 0;
int[] ints = { 0, 1, 2, 4, 8 };
Console.WriteLine("i = " + i);
Console.WriteLine("ints[0] = " + ints[0]);
Console.WriteLine("Calling SomeFunction...");
SomeFunction(ints, i);
Console.WriteLine("i = " + i);
}
}
Pass integer by reference
using System;
public class Starter {
public static void MethodA(ref int parameter) {
parameter = parameter + 5;
}
public static void Main() {
int var = 2;
MethodA(ref var);
Console.WriteLine(var); // 7
}
}
Pass valuel by pointer
using System;
public class Starter {
public unsafe static void Main() {
int val = 5;
int* pA = &val;
int* pB;
pB = MethodA(pA);
Console.WriteLine("*pA = {0} | *pB = {0}", *pA, *pB);
}
public unsafe static int* MethodA(int* pArg) {
*pArg += 15;
return pArg;
}
}
ref pointer parameter
using System;
public class Starter {
public unsafe static void Main() {
int val = 5;
int* pA = &val;
Console.WriteLine("Original: {0}", (int)pA);
MethodA(pA);
Console.WriteLine("MethodA: {0}", (int)pA);
MethodB(ref pA);
Console.WriteLine("MethodB: {0}", (int)pA);
}
public unsafe static void MethodA(int* pArg) {
++pArg;
}
public unsafe static void MethodB(ref int* pArg) {
++pArg;
}
}
Use out to mark an object parameter
using System;
class XInt {
public int iField = 5;
}
class Starter {
public static void MethodA(out XInt alias) {
XInt inner = new XInt();
alias = inner;
}
public static void Main() {
XInt obj;
MethodA(out obj);
Console.WriteLine(obj.iField); // 5
}
}
Use ref to mark an object parameter
using System;
public class XInt {
public int iField = 2;
}
public class Starter {
public static void MethodA(ref XInt alias) {
XInt inner = new XInt();
inner.iField = 5;
alias = inner;
}
public static void Main() {
XInt obj = new XInt();
MethodA(ref obj);
Console.WriteLine(obj.iField); // 5
}
}