一、方法重载
定义一个方法,如果我们再去定义一个名字一样的方法,程序将会报错。方法重载就是通过不同类型的参数,让我们同一个名称的方法,实现不同功能。
只要满足下列三种方法中的其中一种就可以实现方法重载
1.参数个数不同
public static void Add()
{
}
public static void Add(int a)
{
}
当参数个数不同时,调用重载后的Add方法,程序不会报错。
2.参数的类型不同
public static void Add(double a){ } //double类型
public static void Add(int a) { } //重载后为int类型
3.参数顺序不同
使用这种重载方式的前提条件是方法的参数类型不是同一种类型。
public static void Add(int a,double b){ } //Add方法的两个参数类型不能相同
public static void Add(double b,int a) { }
返回值类型不同,不能实现方法重载。方法重载主要针对的是参数而不是返回值类型。
二、参数数组params
使方法可以接受相同类型但是个数不同的参数
params会将传入的参数转换为数组。
params只能修饰一维数组。
params参数数组传入参数时必须放在最后一位否则会报错,传参时不能在一个方法中使用两个params。
static void Main(string[] args)
{
ZongHe(10,20,30); //传入的参数也可以为空
}
//参数数组params
//计算传入参数的总和
public static void ZongHe(params int[] arr)
{
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum+= arr[i];
}
Console.WriteLine(sum);
}
三、ref out关键字
ref在方法内部,把方法外传入的值修改掉。
使用时在方法内和调用时都需要加入关键字ref。
调用时不能直接传int类型的值,应该先定义一个值然后在调用a,定义时必须要进行赋值不能为空。
static void Main(string[] args)
{
int a = 10;
Ref(ref a);
Console.WriteLine(a); //此时a输出为0
}
public static void Ref(ref int a)
{
a= 0;
}
out关键字也可以对外面数值进行修改,在使用时和ref一样,在方法内和调用时都需要加上out。
调用前可以不对参数进行赋值,但必须在参数内进行赋值。
可以输出多个out。
只需要对前面加上关键字out的参数赋值,不加out的参数可以不赋值。
在使用out之前可以不赋值但是必须定义出来。
static void Main(string[] args)
{
int c, d, e;
Out(22,33,out c,out d,out e);
Console.WriteLine(c);
}
public static void Out(int a,int b,out int c,out int d,out int e)
{
c = a + b;
d = b - b;
e = a * b;
}
ref和out的区别
1.在方法外部,使用前都必须要定义,但ref在使用前必须要进行赋值,out可以不赋值。
2.在方法内部,ref可以不进行赋值。但out必须进行赋值。
相同值
1.ref和out都可以返回多个值。
2.在方法内部的参数和在主函数里的调用前面都需要加上对应的关键字(ref/out)
3.都可以对方法外的值进行更改。
四、方法的递归和调用
在使用方法调用时,一定要安装递归装置,否则方法会一直调用下去陷入死循环。
public static void Print(int a)
{//方法的递归和调用
Console.WriteLine("调用");
if (a<=0)
{
return;
}
Print(a-1);
}
五、枚举enum
1.枚举和类(class)同级别。
2.什么时候使用枚举,例如:季节,性别,月份这类有明确种类的东西,可以定义一个枚举。
3.定义枚举时的命名就是其类型。
4.枚举中每项内容,都有其对应默认值,类似数组下标。该值可以更改,若将第一项改为1那么枚举就会从1开始推进。
5.修改默认值时尽量只改首位,不要更改首位后再去更改其他项的默认值。
6.枚举的本质还是一种值类型。
7.不能在枚举中定义和调用方法。
static void Main(string[] args)
{
int a1 ;
Season s = Season.春天;
a1 = (int)s; //强制转换为对应的下标
Console.WriteLine(a1);
int b = 2;
Season A = (Season)b; //转换为枚举内的内容
Console.WriteLine(A);
}
enum Season
{
春天, //0
夏天, //1
秋天, //2
冬天 //3
}
enum Season
{
春天=1, //此时整个枚举从1开始
夏天,
秋天,
冬天
}
六、结构体
(1.值类型:int、double、char·······相当于将原本的值赋值给其他变量,存放在栈
2.引用类型:string···将指向该数据的路径传递给变量,存放在堆里
3.值类型和引用类型存放位置是不一样的值类型存放在栈里,引用类型存放在堆中。
| 特点 | 栈 | 堆 |
| 存放东西 | 小数据 | 大数据 |
| 速度 | 极快 | 较慢 |
| 空间大小 | 很小 | 巨大 |
| 释放方式 | 自动释放 | GC自动回收(不用才清) |
| 存放规则 | 先进后出 | 随意存放 |
| 需要管吗 | 完全不用管 | 不用管,GC帮你清 |
)
结构体和enum一样和class是同级别的
规范写法在struct Studet前应加上public,不写默认为internal(同一个程序集内可访问)
若要在main方法中调用结构体内的属性,需要在定义的属性前加上“public”不加会默认为“private”私有的,无法访问
static void Main(string[] args)
{
int e1;
Studet stu;
stu.age = 20;
stu.name = "小敏";
}
public struct Studet
{
public string name;
public int age;
int sex;
}
如何具体使用struct:结构体名+自定义名。
然后直接使用自定义名+.后的属性。
如果结构体中的属性前没加public,这里就无法调用到该属性。
4万+



被折叠的 条评论
为什么被折叠?



