第四周自学笔记

第四周笔记:

重载
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进行修改
也只可以这样改:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/TangibleCC/article/details/84891782
今日推荐