.NET基础加强第一课--面向对象(OO)
.NET基础加强第一课--面向对象(OO)
- 面向对象
- 什么是类?
- 封装--属性封装字段
- 2, 方法的多个参数封装成一个类
- 3, 把一堆代码封装到一个方法中
- 4, 将一些功能封装到几个类中
- 5, 将一些具有共有功能封装到程序集中
- 继承
- 注意
- 解决:
- 练习:
- this 访问本类的构造函数
- 注意
- 通过虚方法实际多态
面向对象
面向对象三大特性:
封装,继承,多态
面向对象包括 类和对象
什么是类?
类是一种数据类型
例如:蔬菜,水果
对象是具体的,是类的具体实例。对象具有属性(特征)和方法(行为)
封装–属性封装字段
属性封装字段
class Person
{
private int _age;
public int Id { get; set; }
public int Age
{
get { return _age; }
set {
if(value < 0 || value > 120)
{
throw new Exception(“年龄错误”);
}
else
{
_age = value;
}
}
}
}
2, 方法的多个参数封装成一个类
例如: class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public DateTime Date { get; set; }
}
3, 把一堆代码封装到一个方法中
4, 将一些功能封装到几个类中
5, 将一些具有共有功能封装到程序集中
继承
子类继承父类的属性和方法,使创建子类变得很简单,实现了代码重用
好处:1,代码重用
2,多态
需要一个父类类型时,给一个子类类型对象是可以的
这叫做里氏替换原则
Person p1 = new Student();
class Student:Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string course { get; set; }
}
class Person
{
private int _age;
public int Id { get; set; }
public int Age
{
get { return _age; }
set {
if(value < 0 || value > 120)
{
throw new Exception(“年龄错误”);
}
else
{
_age = value;
}
}
}
}
注意
当一个子类继承 父类以后,该子类中的所有构造函数 默认情况下,在自己被
调用之前都会先调用一次父类的无参构造函数 。如果此时父类中没有无参的父类
构造函数 ,则会报错。
解决:
1, 在父类中增加一个无参的构造函数
2, 在子类的构造函数后面通过:base()的方式,明确指定要调用父类中的
哪个构造函数
:base() 表示 调用父类的构造函数
构造函数 是不能被继承 的
练习:
定义一个父类Person ,有2个属性,Name,Age,
一个Student 子类,扩展方法Learn,一个子类 Teacher,扩展方法Talk,
调用父类的构造base 方法,给子类赋值
class Student:Person
{
public Student(string name,int age) : base(name, age)
{
}
public void Learn()
{Console.WriteLine("学习");
}
}
class Teacher : Person
{
public Teacher(string name,int age) : base(name, age)
{
}
public void Talk()
{Console.WriteLine("讲课");
}
}
class Person
{
public Person(string name,int age)
{
this.Age = age;
this.Name = name;
}
public int Id { get; set; }
public int Age{get;set;}
public string Name { get; set;}
}
this 访问本类的构造函数
class Person
{
public Person(string name,int age)
{
this.Name = name;
this.Age = age;
}
public Person(string name):this(name,0)
{
}public Person(int age):this("",age)
{}
public int Id { get; set; }
public int Age{get;set;}
public string Name { get; set;}
}
注意
Public 任何地方
Protected internal 同时包含 Protected Internal
Internal 同一程序集可访问
Protected 当前类内部及所有子类的内部
private 当前类内部
类的成员变量,如果不写访问修饰符,默认是private
类本身如果不写访问修饰符,默认是Internal
通过虚方法实际多态
// 在方法前加 virtual 变成虚方法
练习:
打印属于哪国人
Person[] pers = new Person[4];
pers[0] = new Chinese();
pers[1] = new American();
pers[2] = new Chinese();
pers[3] = new American();
for (int i = 0; i < pers.Length; i++)
{
pers[i].SayNationality();
}
class Chinese:Person
{
public override void SayNationality()
{
Console.WriteLine(“中国人”);
}
}
class American : Person
{
// 通过override 关键字将父类person中的虚方法重写
public override void SayNationality()
{
Console.WriteLine(“I’m USA”);
}
}
class Person
{
public int Id { get; set; }
public int Age{get;set;}
public string Name { get; set;}
// 加 virtual 变成虚方法
public virtual void SayNationality()
{Console.WriteLine("人");
}
}
相关文章:
.NET基础加强第一课--面向对象(OO)
.NET基础加强第一课--面向对象(OO)面向对象什么是类?封装--属性封装字段2, 方法的多个参数封装成一个类3, 把一堆代码封装到一个方法中4, 将一些功能封装到几个类中5, 将一些具有共有功能封装到…...
从Linux源码角度看套接字的Listen及连接队列
今天就从Linux源码的角度看下Server端的Socket在进行listen的时候到底做了哪些事情(基于Linux 3.10内核),当然由于listen的backlog参数和半连接hash表以及全连接队列都相关,在这里也一块讲了。 Server端Socket需要Listen 众所周知,一个Serv…...
cesium: 显示闪烁的点(004)
第004个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置闪烁的点。主要是介绍entity>point 相关的属性设置 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共107行)相关API参考:专栏目标示例效果 配…...
常见代码审计工具,代码审计为什么不能只用工具?
代码审计是一种发现程序漏洞,安全分析为目标的程序源码分析方式。今天主要分享的是几款常用的代码审计工具,以及代码审计工具有哪些优缺点? 代码审计工具 seay代码审计工具,是一款开源的利用C#开发的一款代码审计工具。主要有SQ…...
es8集群模式部署
准备3台机器 192.168.1.41 192.168.1.42 192.168.1.43因为es集群有几个节点,所以我对应node1,node2,node3.这几个名称并不是主机名,而是es节点名称 2. 开始部署,基础配置 (三台都做) systemctl stop firewalld syste…...
OAuth2
1.什么是OAuth2 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP、JavaScript&…...
一、简单排序
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、Comparable接口介绍 1.描述 2.Comparable使用 二、冒泡排序 1.排序原理 2.冒泡排序实现 2.1 冒泡排序API 2.2 冒泡排序实现 3.冒泡排序时间复杂度 三…...
慢SQL出现原因、优化、开启慢查询日志
文章目录慢SQL:出现原因:解决方式:开启慢查询日志:慢SQL: 出现原因: (1)数据库表索引设置不合理 (2)SQL语句有问题,需要优化 解决方式: (1&am…...
要理解网络,其实不就是理解这三张表吗
我们如果要理解数据是如果在网络世界中穿梭的,那其实只要了解其中的三张表就可以了。这三张表分别为路由表、转发表、ARP 表。 假设我们用聊天工具聊天的时候,我在北京,你在广东,当我给你发送一条消息的时候。搭载这这条消息的数据…...
Java异常架构与异常关键字
Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问…...
【阅读笔记】SecureML: A System for ScalablePrivacy-Preserving Machine Learning
1. Motivation 针对机器学习中的出现的数据隐私泄露的风险,提出了线性回归、逻辑回归以及简单神经网络的隐私保护模型。 2. Contributions 2.1 为线性回归、逻辑回归以及神经网络设计安全计算协议 2.1.1.1 线性回归 线性回归损失函数为: , 采用SG…...
【2023美赛】C题Wordle预测27页中文论文及Python代码详解
【2023美赛】C题Wordle预测27页中文论文及Python详解 相关链接 (1)2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 (2)2023年美赛C题Wordle预测问题二建模及Python代码详细讲解 (3)2023年美赛C题…...
【C++修行之路】STL——模拟实现string类
文章目录前言类框架构造与析构c_str迭代器操作符重载[]::> > < < !:reverse与resizereverseresizepush_back与append复用实现insert和erasec_str与流插入、流提取eraseswap(s1,s2)与s1.swap(s2)结语前言 这次我们分几个部分来实现string类…...
CorelDRAW2023最新版序列号使用教程
CorelDRAW2023用起来非常顺手,旨在为用户解决因在工作上带来的问题,在业内可谓享有极高的声誉,是业内人士常用的一款工具,有了它,可以更好的帮助用户把握好各个方面的细节,减少其他方面的失误,让…...
【一天一门编程语言】Python 语言程序设计极简教程
文章目录 Python 语言程序设计极简教程一、Python语言简介1.1 Python的优势1.2 Python的应用二、Python基础语法2.1 Python基础2.1.1 注释2.1.2 变量2.1.3 运算符2.1.4 控制流2.1.5 函数2.2 Python数据类型2.2.1 数字2.2.2 字符串2.2.3 列表2.2.4 元组2.2.4.1 元组的基本操作创…...
14、KL散度
KL 散度,是一个用来衡量两个概率分布的相似性的一个度量指标。 现实世界里的任何观察都可以看成表示成信息和数据,一般来说,我们无法获取数据的总体,我们只能拿到数据的部分样本,根据数据的部分样本,我们会…...
TypeError: load() missing 1 required positional argument: ‘Loader‘解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...
【设计模式】 观察者模式介绍及C代码实现
【设计模式】 观察者模式介绍及C代码实现 背景 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”,即一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。…...
01-Maven基础-简介安装、基本使用(命令)、IDEA配置、(写jar,刷新自动下载)、依赖管理
文章目录0、Maven1、Maven 简介2、Maven 安装配置安装配置步骤3、Maven 基本使用Maven 常用命令Maven 生命周期IDEA 配置 MavenMaven 坐标详解IDEA 创建 Maven 项目IDEA 导入 Maven 项目配置 Maven-Helper 插件 (非常实用的小插件)依赖管理使用坐标导入 jar 包依赖范围0、Maven…...
一、前端稳定性规约该如何制定
前言 稳定性是数学或工程上的用语,判别一系统在有界的输入是否也产生有界的输出。若是,称系统为稳定;若否,则称系统为不稳定。 前端稳定性的体系建设大约可以分为了发布前,发布后,以及事故解决后三个阶段…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
