.net基础笔记8

1. 返回值:

当调用者(main方法)想得到被调用者(自己写的)方法中变量的值时,可以用返回值来返回。要使一个方法具有返回值,需要的步骤:

1)首先确定返回值的类型

2)把void改成返回值相对应的类型

3)在方法中,无论程序如何执行,必须执行到一句话,return要返回的值;当程序执行到这句话时,立即退出这个方法,后面的代码不再执行。

4)在方法调用之前,来定义一个和返回值相同类型的变量来接受返回值。

注意:当程序遇到return就是退出方法。只有没有返回值的方法可以省略return,编译器会在最后面加上一个return。

例:

 

View Code
        static void Main(string[] args)
{
int a = 32;
int b = 23;
int sum = Program.Add(a,b);
Console.WriteLine("2个数的和为:{0}",sum);
Console.ReadKey();
}

/// <summary>
/// 求2个数的和
/// </summary>
/// <param name="number1">第一个加数</param>
/// <param name="number2">第二个加数</param>
/// <returns></returns>
public static int Add(int number1, int number2)
{

int sum = number1 + number2;
return sum;
}

 

2. 方法的重载:

允许在同一个类中定义多个相同名字的方法,在定义同名方法时,一定要满足以下2个条件中至少一个:

1)参数的个数不同

2)对应位置上的参数类型不同

才能构成方法的重载。

注意:方法的重载与返回值的类型没有关系

例:

View Code
static void Main(string[] args)
{
Console.WriteLine(Add(12,34));
Console.WriteLine(Add(12.32, 34));
Console.WriteLine(Add(123.34, 34.54));
Console.WriteLine(Add("", ""));
Console.ReadKey();

}

/// <summary>
/// 2个整数相加
/// </summary>
/// <param name="num1">第一个数</param>
/// <param name="num2">第二个数</param>
/// <returns></returns>
public static int Add(int num1, int num2)
{
return num1 + num2;
}

/// <summary>
/// 一个整数和一个小数相加
/// </summary>
/// <param name="num1">一个整数</param>
/// <param name="num2">一个小数</param>
/// <returns></returns>
public static double Add(int num1, double num2)
{
return num1 + num2;
}

/// <summary>
/// 2个小数相加
/// </summary>
/// <param name="num1">第一个小数</param>
/// <param name="num2">第二个小数</param>
/// <returns></returns>
public static double Add(double num1, double num2)
{
return num1 + num2;
}

/// <summary>
/// 2个字符串相加
/// </summary>
/// <param name="str1">第一个字符串</param>
/// <param name="str2">第二个字符串</param>
/// <returns></returns>
public static string Add(string str1, string str2)
{
string str = str1 + str2;
return str;
}

 

3. 可变参数:

在C#中,有一个类叫object类,这个类是所有类的父类,所以所有的类都可以隐式转换成object类。

params修饰一个数字,叫做可变参数。

可变参数必须作为参数列表的最后一个参数。

用户传一个数字过来也行,传多个实参也行,这多个实参会自动组装成一个数字赋值给形参。

例:

View Code
 static void Main(string[] args)
{
Avg("张三",23,44,22,55,33,23,88);
Console.ReadKey();
}

public static void Avg(string str, params int[] array)
{
int sum = 0;
for (int i = 0; i < array.Length; i++)
{
sum += array[i];
}
Console.WriteLine("{0}的平均成绩为:{1}",str,sum/array.Length);
}

 

4. 方法从形参传出多个值:

如果形参前加了一个out说明这个参数是用来传出值的,那么在对应这个方法时,这个out修饰的参数对应的实参变量前面也必须加一个out,说明这个变量是接受传出来的值的。

那么在方法中改变了out修改的对应变量的值,实参对应变量的值也会发生改变,因为它们指向了同一块内存空间。

ref也可以实现上述功能。

out与ref的异同:

相同点:

1)本质是相同的,都传的是内存空间的地址,所以在修改形参后,实参也会发生改变(都是传地址)。

不同点:

1)out更注重传出值即被调用的方法向调用者传值。out修饰的实参不用初始化。

2)被out修饰的形参在方法中必须先赋值才能使用。

3)ref可以理解是双向传递既可以传入也可以传出。所以在用作实参之前必须初始化。

4)在方法中,ref修饰的形参可以直接使用。

例:

View Code
         /// <summary>
/// 返回数组中最大值和最小值
/// </summary>
/// <param name="numbers">数组</param>
/// <param name="max">最大值</param>
/// <param name="min">最小值</param>
public static void FindNumber(int[] numbers, out int max, out int min)
{
max = numbers[0];
min = numbers[0];
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] > max)
{
max = numbers[i];
}
else if (numbers[i] < min)
{
min = numbers[i];
}

}
}
static void Main(string[] args)
{
int[] num = InputArray();
int max;
int min;
FindNumber(num, out max, out min);
Console.WriteLine("最大值为:{0}", max);
Console.WriteLine("最小值为:{0}", min);
Console.ReadKey();
}

//返回一个整数
public static int IsInt(string num)
{
while (true)
{
int result;
if (int.TryParse(num, out result))
{
return result;
}
else
{
Console.WriteLine("输入错误,请输入一个整数:");
num = Console.ReadLine();
continue;
}
}
}
//输入一个数组并返回数组
public static int[] InputArray()
{
string ArrayLenth;
Console.WriteLine("请输入数组的长度:");
int result;
while (true)
{
ArrayLenth = Console.ReadLine();
result = IsInt(ArrayLenth);
if (result <= 0)
{
Console.WriteLine("请输入大于0的正数:");
continue;
}
else
{
int[] Array = new int[result];
for (int i = 0; i < Array.Length; i++)
{
Console.WriteLine("请输入数组的第{0}个元素:", i + 1);
string ArrayYuansu;
ArrayYuansu = Console.ReadLine();
int result1 = IsInt(ArrayYuansu);
Array[i] = result1;
}
return Array;
}
}
}

 

5. 类型名.TryParse() 

类型名.TryParse() 方法与try{}catch{}捕获异常类似,但是类型名.TryParse()方法的效率更高(推荐使用)。

用法:

View Code
        /// <summary>
/// 判断一个数是否是质数
/// </summary>
/// <param name="number">要判断的数</param>
/// <returns></returns>
public static bool IsPrime(int number)
{
bool flag = false;
if (number == 0 || number == 1 || number < 0)
{
flag = true;
}
else
{
for (int i = 2; i <= number - 2; i++)
{
if (number % i == 0)
{
flag = true;
}
}
}
return flag;
}


static void Main(string[] args)
{
string number = "";
Console.WriteLine("请输入一个数:");
number = Console.ReadLine();
while (number != "q")
{
int num;//接受转换后的值

if (int.TryParse(number, out num))
{
if (!IsPrime(num))
{
Console.WriteLine("{0}是质数!!", num);
}
else
{
Console.WriteLine("{0}不是质数!!", num);
}
break;
}
else
{
Console.WriteLine("请输入一个正整数:");
number = Console.ReadLine();
continue;
}
}
Console.WriteLine("程序结束!!");
Console.ReadKey();
}

 

 

posted @ 2012-02-24 22:03  何冬冬  阅读(339)  评论(0编辑  收藏  举报