.NET基础加强第三课--接口及异常处理
创始人
2024-06-02 04:27:02
0

.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,并不判断两个对象是否为同一对象

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...