当前位置: 首页 > news >正文

.Net Framework 4/C# 面向对象编程进阶

一、继承

(一)使用继承

        子类可以继承父类原有的属性和方法,也可以增加原来父类不具备的属性和方法,或者直接重写父类中的某些方法。

        C# 中使用“:”来表示两个类的继承。子类不能访问父类的私有成员,但是可以访问其公有成员,即只要使用 public 声明类成员,就既可以让一个类成员被父类和子类同时访问,也可以被外部的代码访问。

        另外,为了解决父类成员的访问问题,C# 还提供了另外一种访问修饰符:protected,它表示受保护成员,只有父类和子类才能访问 protected 成员,外部代码不能访问。

        子类不能继承父类中定义的 private 成员。

        需要注意以下几点:

  1. C# 只支持类的单继承,而不支持类的多重继承,即在 C# 中一次只允许继承一个类,不能同时继承多个类;
  2. 在实现类的继承时,子类的可访问行必须要低于或者等于父类的可访问性,例如父类采用默认的访问权限:private 时,子类在继承的时候,不能采用 public 的访问权限,因为 public 的访问权限高于 private 的访问权限。

(二) base 关键字

        如果子类重写了父类的方法,并且想在子类的方法中调用父类原有的方法,C# 提供了 base 关键字。

        base 关键字的使用方法与 this 关键字的使用方法类似,this 关键字代表本类对象,base 关键字代表父类对象,使用方法如下:

base.property;		//调用父类的属性
base.method();		//调用父类的方法

        如果要在子类中使用 base 关键字调用父类的属性或者方法,则父类的属性和方法的可访问性必须定义为 public 或者 protecte,而不能是 private。

        另外,使用 base 关键字还可以指定创建子类对象时应调用的父类构造函数。例如有:

public Computer(string name, string num)
{name = name;num = num;
}public Pad(string model, string name, string num):base(name, num)
{model = model;
}

        在静态方法中使用 base 关键字是错误的。

(三)继承中的构造函数与析构函数

        在进行类的继承时,子类的构造函数会隐式地调用父类的无参构造函数,而且先调用父类的构造函数,再调用子类的构造函数,析构函数的调用与构造函数相反。

        需要注意的是,如果父类提供了有参构造函数,在被子类继承时,需要提供无参默认构造函数,这是因为当父类提供有参构造函数时,不会自动提供无参构造函数。

        通过 base 关键字,还可以在子类中调用父类的有参构造函数,此时,父类中就可以不用提供无参构造函数,例如有:

public class Father
{public Father(string name, int age){this.name = name;this.age = age;}
}public class Son : Father
{public Son(string name, int age, char gender) : base(name, age){this.gender = gender;}
}

(四)object 类

        在 C# 中,所有的类都直接或间接的继承自了 object 类,object 类是所有类的基类。

(五)关键字 new 隐藏父类成员

        当子类和父类在声明成员时,如果子类和父类的成员名相同,则会隐藏掉父类的成员方法,子类对象无法调用父类的成员,这时,程序会报警告。因此,可以在子类定义同名成员时,在访问修饰符后面加上 new 关键字,此时就可以完全隐藏掉父类的同名成员。

(六)sealed 修饰符

        继承类时,需要使用冒号加类名,当对一个类应用 sealed 修饰符时(也就是密封类),该修饰符会阻止其他类从该类继承。

(七)里氏转换*

        里氏转换主要有两个作用:

  1. 子类可以赋值给父类,也就是说,如果有一个地方需要一个父类作为参数,我们可以给一个子类代替;
  2. 如果父类中装的是子类对象,那么可以将这个父类强转为子类对象。

        例如有:

public class Father
{public void text01(){}
}public class Son : Father
{public void text02(){

相关文章:

  • 【2025】通过idea把项目到私有仓库(3)
  • 宏基因组产品升级——微生物菌群木质素降解能力评估!
  • 中科君芯JFG150N40B 40V-N沟道增强模式功率驱动器
  • Go语言依赖管理与版本控制-《Go语言实战指南》
  • [蓝桥杯]最大比例
  • [蓝桥杯]三元组中心问题
  • 如何在mac上安装podman
  • 机器学习监督学习sklearn实战三:八种算法对印第安人糖尿病预测数据进行分类和比较
  • 在WPS中如何启用宏VBA wps.vba.exe下载和安装
  • 归一化 Normalization 技术概述、优化思路
  • 使用cursor 编辑器开发 Vue项目,配置ESlint自动修复脚本,解决代码不规范引起的报错无法运行项目问题
  • 使用TypeScript构建一个最简单的MCP服务器
  • 开源库 API 化平台 (ALLBEAPI) - 让优秀工具触手可及!
  • PowerBI企业运营分析—全动态盈亏平衡分析
  • VS Code开发项目,配置ESlint自动修复脚本
  • Ubuntu 25.10 将默认使用 sudo-rs
  • 在CSDN发布AWS Proton解决方案:实现云原生应用的标准化部署
  • Solana Web3 快速入门:创建并获取钱包账户的完整指南
  • iOS UIActivityViewController 组头处理
  • 第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
  • 网站建设资料 优帮云/百度下载app安装
  • 响应式网站案例源码/衡阳seo排名
  • 自己做网站什么类型的比较好/百度关键词搜索排行
  • 如何部署asp网站/黑科技引流推广神器免费
  • 哪个女装网站做的好/网络营销心得体会800字
  • 做网站 用什么做数据库最好/seo优化工程师