结构函数
using System;
namespace 结构函数
{
class Program
{
struct Name
{
public string FirstName;
public string LastName;
public string GetName()
{
return FirstName + " " + LastName;
}
}
static void Main(string[] args)
{
Name myName = new Name();
myName.FirstName = "Tou";
myName.LastName = "Ming";
Console.WriteLine(myName.GetName());
}
}
}
函数的重载overload
函数名相同,参数类型不同
using System;
namespace 函数的重载
{
class Program
{
static int Add(params int[] num)//params是用于定义可变长参数,注意,它只能用于一维数组
{
int sum = 0;
for (int i = 0; i < num.Length; i++)
{
sum += num[i];
}
return sum;
}
static double Add(params double[] num)
{
double sum = 0;
for (int i = 0; i < num.Length; i++)
{
sum += num[i];
}
return sum;
}
static void Main(string[] args)
{
int[] num_1 = new int[3] { 1, 2, 3 };
double[] num_2 = new double[3] { 1.1, 2.2, 3.3 };
Console.WriteLine(Add(num_1));
Console.WriteLine(Add(num_2));
}
}
}
委托
委托(delegate)是一种存储函数引用的类型 委托的定义指定了一个返回类型和一个参数类型
委托的使用分为两部分 定义 声明(变量) 结构体、枚举的使用同上部分为定义和声明
using System;
namespace 委托的使用
{
public delegate int delegate_1(params int[] num);
class Program
{
static int Add(params int[] num)//params是用于定义可变长参数,注意,它只能用于一维数组
{
int sum = 0;
for (int i = 0; i < num.Length; i++)
{
sum += num[i];
}
return sum;
}
static void Main(string[] args)
{
int[] num_1 = new int[3] { 1, 2, 3 };
delegate_1 de_1;
de_1 = Add;
Console.WriteLine(de_1(num_1));
}
}
}
委托写在类外,与类同级 如代码所示,委托与被委托的方法必须返回参数和获取参数的类型要一致。
错误处理调试
代码错误分为语法错误和逻辑错误
语法错误编译器会帮助你找到错误并提示改正
逻辑错误得需要自己调式发现并改正
编写弹性代码来处理可能会发生的致命错误
使用输出语句在控制台观察变量的值来进行调试
使用中端调试来查看程序的状态,中断模式就是暂停程序。
错误处理(异常处理)
捕捉异常
try...catch..finally
格式
try{
? ? ? ? ? ? ? ? ...
} catch(<exceptionType> e){
? ? ? ? ...
} finally{
}
exception指异常的类型
catch和finally都可以有0个或多个 如果没catch则必须有finally,如果有catch,finally可以有,也可以无
?catch:当代码发生异常,那么异常的类型和catch块中的类型一致时,则会执行该catch块 如果catch块的参数不写,则不管发生什么异常,都会执行这个catch块
finally:包含了始终会执行的代码,不管有没有发生异常都会执行
catch语句捕捉到异常就会结束本次循环,所以多个catch有只会有一个catch能捕捉到异常并执行命令。
using System;
namespace 异常处理
{
class Program
{
static void Main(string[] args)
{
int[] num = { 1, 2, 3 };
try
{
int ret = num[3];
//这里num[3]造成数组内存溢出
//出现错误
Console.WriteLine(ret);
}
catch (IndexOutOfRangeException)
{
Console.WriteLine("IndexOutOfRangeException");
Console.WriteLine("数组下标越界");
}
catch (NullReferenceException)
{
Console.WriteLine("NullReferenceException");
}
catch
{
Console.WriteLine("ERROR");
}
}
}
}
如果try中有一行代码发生了异常,那么这行代码下其他代码就不会执行了
?
using System;
using System.Collections.Generic;
namespace 异常处理
{
class Program
{
static void Main(string[] args)
{
int[] num = { 1, 2, 3 };
Console.WriteLine("请输入你想要访问的下标");
while (true)
{
try
{
int ret_1 = Convert.ToInt32(Console.ReadLine());
int ret = num[ret_1];
//这里num[3]造成数组内存溢出
//出现错误
Console.WriteLine("num[{0}] ={1}", ret_1, ret);
break;
}
catch (IndexOutOfRangeException)
{
Console.WriteLine("IndexOutOfRangeException");
Console.WriteLine("数组下标越界");
}
catch (NullReferenceException)
{
Console.WriteLine("NullReferenceException");
}
catch (FormatException)
{
Console.WriteLine("请输入整数");
}
}
//catch
//{
// Console.WriteLine("ERROR");
//}
}
}
}
?
面向对象编程
类
类创建的变量叫对象
类实际上是创建对象的模板,类定义了类的每个对象的数据和功能 ?
数据成员
函数成员
字段的声明:访问修饰符 类型 字段名称
方法的声明:访问修饰符 返回值类型 方法名称(参数){ ? ? ? ? ? ? ? ? ? ? ? ? //方法体 }
Info.cs ?
using System;
namespace learn.类的调用
{
class Info
{
static void Main(string[] args)
{
double a = 1.0;
double b = 2.3;
double c = 2.2;
Volu num = new Volu();//使用Volu模板创建一个num的对象
num.Long = a;
num.High = b;
num.Wide = c;
Console.WriteLine(num.VolumeNum());
//对象的属性以及函数调用
}
}
}
Vulm.cs ?
namespace learn.类的调用
{
class Volu
{
public double Long;
public double Wide;
public double High;
public double VolumeNum()
{
return Long * Wide * High;
}
}
}
|