.NET基础加强第三课--接口及异常处理

.NET基础加强第三课--接口及异常处理

  • 接口总结接口是一种规范
    • 抽象类:abstract
    • 类型转换
    • 异常处理
    • 第一种:
    • 第二种
    • 注意:
    • out 参数
  • 比较两个对象是否为同一对象
    • 方法一:object.ReferenceEquals(对象1 ,对象2)
    • 注意:==,Equals,ReferenceEquals

接口总结接口是一种规范

接口中的所有成员,都不能显示的写任何访问修饰符
默认是public 的访问修饰符
接口不能包含任何实现
在接口中表示一个未实现的属性
String Name{get;set;}
索引器
String this[int index]
{get;set;}

接口不能实例化
接口就是让子类来实现的
显示实现接口只能是私有的

建议:
1, 接口抽象类父类具体类 能使用接口就不用抽象类,能用抽象类不用类
能用父类不用子类
2, 避免定义”体积庞大的接口”,”多功能接口”,会造成”接口污染”
3, 定义多个职责单一的接口(小接口),组合使用

实例:
IFlayable bird = new XiaoQue(“小飞翔”);
bird.Fly();

Console.ReadKey();

public class Sparrow : IFlayable
{
public string Name { get; set; }
public Sparrow(string name)
{
this.Name = name;
}
public void Fly()
{
Console.WriteLine($“{Name} 可以飞”);
}
}

public class XiaoQue : Sparrow, IFlayable
{
public XiaoQue(string name) : base(name)
{
}
}

public interface IFlayable
{
void Fly();
}

抽象类:abstract

1, 不能被实例化,需要继承,多态
2, 子类必须重写父类中的所有抽象成员,除非子类也是抽象 类
3, 抽象成员在父类中不能有任何实现
4, 抽象类中可以有实例成员
5, 抽象成员的访问修饰符不能是private
6, 抽象成员只能写在抽象类中

类型转换

隐式类型转换—数据类型一致,数据类型小的转成数据类型大
Int,char,byte,short,long 数值类型,可以相互转换

数据类型长度
Console.WriteLine(sizeof(bool));
Console.WriteLine(sizeof(byte));
Console.WriteLine(sizeof(char));
Console.WriteLine(sizeof(int));
Console.WriteLine(sizeof(double));

异常处理

什么是异常
程序运行时发生错误
异常处理的一般代码模式
try{} catch{} finally{}

举例:
Person p = new Person();
p = null;
try
{
p.Name = “张”;
}catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.WriteLine(“finally”);
}

Console.ReadKey();

public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}

第一种:

try
{
}catch// 没有参数,捕获所有的异常
{
Console.WriteLine(“”);
}

第二种

try
{
p.Name = “张”;
}catch (Exception ex) // 可以捕获所有的异常,对所有异常产种相同的处理方式
{
Console.WriteLine(ex.Message);
}
第三种,对不同异常,使用不同的方式来处理
使用多个不同的catch块来捕获异常

注意:

如果希望代码一定要被执行,则一定要将代码放到finally块中
1, 当catch有无法捕获到的异常时,程序崩溃,但在程序崩溃前会执行
Finally中的代码,而finally块后的代码则由于程序崩溃无法执行
2, 如果在catch发生了异常,则finally块中的代码也会在继续引发异常前执行
但finally块后的代码则不会执行
3, 当catch块中有return 语句时,finally块中的代码会在return 之前执行
但finally块后代码不会执行

catch {
Console.WriteLine(“异常”);
//在catch中使用trhow语句,只能在catch块里面
// 表示将当前异常继续向上抛出
throw;
}

// 1, 如果方法有多个参数,可变参数一定要放最后面
// 2, 可变参数可以传递参数也可以不传递

out 参数

// 1, out 参数在使用之前必须 在方法里面为out参数赋值
//out 参数无法获取传递进来的变量中的值
//2, out 参数在方法执行完毕之前,必须赋值
举例:
int m = 100;
Demo1(out m);
Console.WriteLine(m);
Console.ReadKey();

static void Demo1(out int x)
{

x = 1;
x++;

}

比较两个对象是否为同一对象

方法一:object.ReferenceEquals(对象1 ,对象2)

举例:
Person p1 = new Person();
p1.Name = “zs”;

Person p2 = new Person();
p2.Name = “zs”;

Person p3 = p1;

// 比较两个对象是否为同一对象
Console.WriteLine(object.ReferenceEquals(p1, p2));
Console.WriteLine(object.ReferenceEquals(p1, p3));

Console.ReadKey();

public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }

}

注意:==,Equals,ReferenceEquals

1,使用 Object.ReferenceEquals 可以准确验证两个变量是否为同一个对象

对于字符串类型而言,==,Equals 都是判断字符串串的字符是否完全一样,
如果完全一样,就返回true,并不判断两个对象是否为同一对象

你可能感兴趣的:(.net,基础加强,.net,c#,java)