您的位置:首页 > 职场人生

黑马程序员 自学14C#编程基础之方法重载与out

2014-04-16 23:20 309 查看
-------
Windows Phone 7手机开发、.Net培训、期待与您交流! -------


方法的重载

2014/4/7

“可以定义同名方法,但参数类型要不同。编译器会根据不同的参数选择不同的方法(方法的重载)。”

什么是方法的重载

一般在同一个类中,方法名相同,并且方法的参数的个数不同,或者对应位置上的类型不同,才能构成方法的重载。

注意:方法重载与返回值无关。只看参数(参数相同,类型相同//方法名不同,绝不可重载)

方法名要相同,参数是一一对应的关系。

ps 任意类型都可以转换成object类型。

思考:方法只能返回一个值,当需要返回多个值时怎么办?

eg:写一个方法,计算一个int类型数组中每个元素的总和和最大值最小值。

传一组数组的时候,类型必须相同。

除了返回值可以返回,还可以通过参数来返回,参数默认是只传递的。

Out

……Main()

{

……

Test( out 参数);

}

……Test(out 参数)

{……}

通过参数来返值。

Out+参数 → out+参数(这里对参数必须赋值才能传回)

Class Program;

{

Static void Main(string[]args)

{

Int number;

Int result = Test(out number); //这里没赋值就使用,实际上”out int a”对number已经赋值了

Console.WriteLine=(number={0},result={1},number,result);

Console.ReadKey();

}

Static int Test(out int a)

{

a=10;//Must赋值

a=a+1;

return 200;

}

如上代码:

实现步骤:

1. 在方法的参数类型前加out,那么传参数的时候,也必须在number前加out。表明这个参数不是单向传入的,而是用来双向传输的。(可是传入无意义,因为未赋值的a是不能在没接收number的值后拿来使用)

eg:

int number;

Test(out number);

…………

Static void Test(out a)

{

Int b=a;//这属于未赋值,不能使用,错误的。

……

}

如果对number赋值了,可以传入,无意义:

intnumber=100;

Test(out number);

…………

Static void Test(out a)

{

a=10;

a=a+1;

……

}

Out就是用来传出数据的。

2. 若参数就是以out形式传入,那么在传入前就可以不赋初值。

3. 在方法中对于由out传入的参数,必须赋值,并且必须在使用前赋值。(a=10;a=a+1;)

Int TryParse();把字符串转换成一个int类型的方法。

↑这个整体为bool类型。()内填入: 要转换的字符串 ,out+要输出的int变量名 eg:s,out re

string s=”123”;

//int.Parse(s);→直接转换,如果string无法转换,则异常。

//int.TryParse(s);→先检测后转换,bool类型。

Int re;

If(int.TryParse(s,out re))//==true

{

Console.WriteLine(“能转换成功,转换后的数为:”+re);

}

else//(TryParse==false转换失败)

{

…………

}

Test1.写一个方法MyParse,实现:

1. 用户传入两个参数( 1)传转换的字符串,int类型;2)转换成功后的返值。)

2. 转换成功返值:true,转换结构通过参数返回。

若此方法,用户传入的参数不能转换,则方法返回:false,结果=0(参数无意义,在方法中随意赋值返回)

Ps:若实现某功能代表不能用该功能语句来做。

练习:

练习一:
/*写一个MyTryParse方法,要求用户传入一个字符串,如果这个字符串能够转换成int类型,则方法返回true,并且转换后的int类型数据通过方法的参数传出;
如果字符串不能转换成int类型,则方法返回false,那么out传出的参数将没有意义,在方法中让参数随意赋值。=0*/
static void Main(string[] args)
{
#region int.TryParse(s,int string)功能的实现//此方法用put参传回对输入字符串的处理结果,用返回值传回是否转换。

Console.WriteLine("请随意输入");
Console.Write("在此输入:");
string u = "0";
string accept = change(out u);
if (accept == "true")
{
Console.WriteLine(accept);
Console.Write("刚刚输入的内容可以转换为数字→" + u);
}
else
{
Console.WriteLine(accept);
Console.Write("您输入的{0}无法转换为数字", u);
}
Console.ReadKey();
}

public static string change(out string accept)
{
string input = Console.ReadLine();

try
{
int accept1 = int.Parse(input);
accept = Convert.ToString(accept1);
string result = "true";
return result;
}
catch
{
accept = input;
bool result = false;
string re = Convert.ToString(result);
return re;
}
}


练习二:
#region 第二种写法 标准答案
static void Main(string[] args)
{
Console.WriteLine("请随意输入");
Console.Write("在此输入:");
string u = Console.ReadLine();
int result;
bool accept = MyTryParse(u, out result);
if (accept)
{
Console.WriteLine(accept);
Console.Write("你输入的内容可以转换为数字→" + result);
}
else
{
Console.WriteLine(accept);
Console.Write("你输入的内容无法转换为数字→" + u);
}
Console.ReadKey();
}
public static bool MyTryParse(string u, out int result)
{
bool accept = true;
try
{
result = int.Parse(u);
}
catch
{
result = 0;
accept = false;
}
return accept;
}

#endregion


练习三:
#region 第三种写法 不符合题目要求,单纯用传参和返回值,没有out参
static void Main(string[] args)
{
Console.WriteLine("请随意输入");
Console.Write("在此输入:");
string u = Console.ReadLine();
bool accept = MyTryParse(u);
if (accept == true)
{
Console.WriteLine(accept);
Console.Write("刚刚输入的内容可以转换为数字→" + u);
}
else
{
Console.WriteLine(accept);
Console.Write("您输入的{0}无法转换为数字", u);
}
Console.ReadKey();
}
public static bool MyTryParse(string u)
{
try
{
int accept1 = int.Parse(u);
string accept = Convert.ToString(accept1);
bool result = true;
return result;
}
catch
{
bool result = false;
return result;
}
}
#endregion

#endregion


练习四:
#region int.TryParse((string),out(int));
static void Main(string[] args)
{
Console.WriteLine("请随意输入");
Console.Write("在此输入:");
string u = Console.ReadLine();
int result;
if (int.TryParse(u, out result))
{
Console.WriteLine("你刚刚输入的可以转换为数字→" + result);
}
else
{
Console.WriteLine("你刚刚输入的数字不能转换成数字");
}
Console.ReadKey();

}
#endregion


其他:
#region
Console.WriteLine("请随意输入");
Console.Write("在此输入:");
string u = Console.ReadLine();
bool accept = MyTryParse(u);
if (accept == true)
{
Console.WriteLine(accept);
Console.Write("刚刚输入的内容可以转换为数字→" + u);
}
else
{
Console.WriteLine(accept);
Console.Write("您输入的{0}无法转换为数字", u);
}
Console.ReadKey();
}
public static bool MyTryParse(string u)
{
try
{
int accept1 = int.Parse(u);
string accept = Convert.ToString(accept1);
bool result = true;
return result;
}
catch
{
bool result = false;
return result;
}
#endregion


int digital=100;
int accept = Test(out digital);
}
public static int Test(out int accept)
{
//int b = accept;赋值之前不可以使用 因为out只能传出,传入的值无法用。
accept = 10;
Console.WriteLine(accept);
return 10;
}
}


-------
Windows Phone 7手机开发、.Net培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: