第四周笔记:
重载
1.同名的两个函数的签名(参数的类型、顺序、返回值的类型)不能完全一致;
2.和参数的名字无关;
3.函数的重载不管返回值类型;只有函数的类型和顺序不一致才可以函数重名,函数返回值一致与否没关系;比如说:
前面有
static void next(string boss)
{
If(boss==“毛”)
{
Console.writeline(“邓”);
}
}
你再写个static void next(string boss)是不可以的,哪怕是static int next(string boss)也不行。
目的:如果函数不能重载,太痛苦了。那么如果重名,函数掉谁?所以这得有规矩
可变参数
如果要取出数据中的最大值
static void Main(string[] args)
{
int[] values = { 3, 5, 2, 9, 7 };
int i = Maxx(values);
//int i =Maxx(3,5,2,9,7);上面是两行,也可以是这一行。?????????
Console.ReadKey();
}
static int Maxx(int[] values)
{
int max = 0;//先定义一个最大值
foreach (int value in values)
{
if (value > max)
{
max = value;
}
}
return max;
}
那么我们这样:
static void Main(string[] args)
{
//int[] values = { 3, 5, 2, 9, 7 };
//int i = Maxx(values);
int j = Maxx(3, 5, 2, 97, 7);
Console.WriteLine(j);
Console.ReadKey();
}
static int Maxx(params int[] values)//params int。看起来像max是一个参数,实际可以放进多个参数。即上面五个参数传到Max里变成了int数组,如果(3, 5, 2, 97, 7,“tom”)显然也不行。而(3,6,10)这样三个也可以,所以这就是可变参数,数量可变。个数不确定的可变参数以数组的形式传递。
{
int max = 0;//首骸?先è定¨义?一?个?最?大洙?值μ
foreach (int value in values)
{
if (value > max)
{
max = value;
}
}
return max;
}
那么我们里面除了有可变参数,还可以加别的:
class Program
{
static void Main(string[] args)
{
int j = Maxx(true,"afasdf",3, 5, 2, 97, 7);
Console.WriteLine(j);
Console.ReadKey();
}
static int Maxx(bool b,string msg,params int[] values)//随便加的
{
Console.WriteLine(msg);//呀吼
int max = 0;
foreach (int value in values)
{
if (value > max)
{
max = value;
}
}
return max;
}
注意:可变参数一定要是所有参数的最后一个!
另外可以看出可变参数其实是一个数组,所以上面这个可以这么提↓
Max(true,””,values)?????????没看出特别的地方
那么我们想以前哪里用过可变参数吗?
Console.Writelin(“{0},{1}”,3,5,6,9,3,3,90,9);
其实他这是
Writeline(string format,params object【】 arg)
参数默认值(C#4.0) :static void SayHello(string name,int age=20)
就是这么个意思,默认是20岁,当用户不输入年龄时候就用20,输入年龄就用用户的
再比如也可以
static void SayHello(string name,int age=20,bool gender = true);
但注意默认值必须在非默认值之后。
其实这个功能在2010可以用,但2008版本是不可用的,那如果呈现这样默认值的效果呢?对,是重载,在构造函数时候用的很多:
这是两个函数,我设为w和m,ak 47对应w,而杨中科它对应m,来到m后变成了杨中科 20,从而在进入w。??????这个m
W和m是函数个数不一样,从而构成了重载。
函数的ref、out参数
ref
这个程序会呈现:
1
2
1
在第八行int i1,是复制了一份i1传到了DotIt,所以第八行再折腾的是复制品。
如果我就想折腾外边的
这个程序出来的是 10 20 。因为穿进去的复制的,外边的不会变。
那么如果要折腾本身而不要复制品呢?
Ref 是reference的缩写。编辑为ref就是要求调用者穿点变量的引用。从而会弹出20 10
注意之前必须要给变量赋值,因为这样才可以用。
out
Ref和out 当然是目的不同。
这有一个返回值,其实还会有不成功,不合法的的时候,那么还要有一个返回值来说名不成功么,比如在函数int在跟个bool么?不行,因为只有一个返回值,所以需要 out:
从而:
也可以if (b==true)
也需要有返回值,就return -1了
这其实就是表示,一个返回值是int 还有一个是是否返回成功的意思了
可以看出out的目的是让函数返回不止一个返回值,虽然他放在的是参数的位置,但是她冲当是一个返回值的作用;第二个就是当给parse传值的时候,没必要给bool b = true赋值,因为给他赋值也不认,因为out处其实是返回值的意思,所以不需要给out附初值了。
会报错。
特会报错,因为其实out就是起到返回值作用,答应返回必须返回。所以说函数结束之前,在函数内部,要给out赋值。
以下是之前一个简单程序,其实也是假定用户一定输入合法整数:
在实际中当然不是这样,所以我们引入新的东东tryparse:
其实:
字符串的处理
“f”长度为1的字符串
‘f’字符
Char c =“f”------不对
String f =‘d’------不对
“”也可以是空的字符串
‘f’和“f”区别,“”和null的区别----------
比如
String s =null
String s=“”
分辨是否为空字符串:
或者
打印字符串长度:
读第三个字符类型:
亦可以为指定位置改值么:
所以说只能读,不能改。C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改
也只可以这样改: