新闻详情

新闻详情

首页 / 资讯中心 / 详情

C#第二周学习的重点

发布时间:2026/9/26 11:08:24来源:尧图网络
C#第二周学习的重点
本文记录面向对象编程的核心概念类与对象、构造方法、方法重载以及继承与重写。通过一个「学生信息管理系统」的实战案例逐步理解 OOP 思想。一、类与对象1.1 引言今天主要学习了面向对象编程。面向对象不同于面向过程面向过程更注重于动作过程而面向对象更注重于对象本身。我们定义一个类类中有属性和方法拥有这些属性和方法的变量称为对象对象可以调用类中的方法。使用类提升了我们的代码复用性。当我们需要定义多个拥有同样属性和方法的变量时只需构造一个类将它们定义为该类的对象即可。例如我们需要存储多个人的个人信息并输出。如果不定义类和对象我们需要依次定义每个人的信息和输出这样会大大增加代码的冗余度如果定义类与对象我们可以减少重复的代码提升代码的复用性。1.2 定义 Student 类// 定义 Student 类的代码为internalclassStudent{/// summary/// 学号/// /summaryprivatestring_id;publicstringId{get{return_id;}set{if(value.Length8){_idvalue;}else{_idnull;}}}/// summary/// 姓名/// /summarypublicstring_name;publicstringName{get{return_name;}set{_namevalue;}}/// summary/// 年龄/// /summarypublicint_age;publicintAge{get{return_age;}set{if(value0value150){_agevalue;}}}/// summary/// 性别/// /summarypublicchar_sex;publiccharSex{get{return_sex;}set{if(value!男value!女){value男;}_sexvalue;}}publicstringAiHao;publicvoidJiBen(){Console.WriteLine($大家好我叫{Name}学号是{Id}我今年{Age}岁是个{Sex}生我的爱好是{AiHao});}}1.3 Main 函数代码staticvoidMain(string[]args){stringjiXu;do{Console.WriteLine(学生1张三\n学生2李四\n学生3王五\n学生4老六\n学生5改个蛋);Console.WriteLine(请输入要查看的自我介绍的学生代号为);intstudentNumConvert.ToInt32(Console.ReadLine());switch(studentNum){case1:Studentstudent1newStudent();student1.Name张三;student1.Sex男;student1.Age18;student1.Id26310101;student1.AiHao打篮球;student1.JiBen();break;case2:Studentstudent2newStudent();student2.Name李四;student2.Sex男;student2.Age19;student2.Id26310102;student2.AiHao打羽毛球;student2.JiBen();break;case3:Studentstudent3newStudent();student3.Name王五;student3.Sex女;student3.Age18;student3.Id26310103;student3.AiHao打篮球;student3.JiBen();break;case4:Studentstudent4newStudent();student4.Name老六;student4.Sex男;student4.Age19;student4.Id26310104;student4.AiHao踢足球;student4.JiBen();break;case5:Studentstudent5newStudent();student5.Name改个蛋;student5.Sex女;student5.Age18;student5.Id26310105;student5.AiHao打乒乓球;student5.JiBen();break;}Console.WriteLine(是否继续查看y/n);jiXuConsole.ReadLine();}while(jiXuy||jiXuY);}1.4 小结通过定义Student类我们只需创建不同的对象并赋值即可复用同一套属性和方法大大减少了重复代码这正是面向对象编程的核心优势。二、构造方法2.1 为什么需要构造方法上次我在面向对象提到过类与对象虽然提升了一定的代码复用率但是我们不难发现还是会有大量的对对象赋值的语句较为重复我们今天使用构造方法来进一步减少代码冗余度。例如// 定义 Student 类的代码为internalclassStudent{/// summary/// 学号/// /summaryprivatestring_id;publicstringId{get{return_id;}set{if(value.Length8){_idvalue;}else{_idnull;}}}/// summary/// 姓名/// /summarypublicstring_name;publicstringName{get{return_name;}set{_namevalue;}}/// summary/// 年龄/// /summarypublicint_age;publicintAge{get{return_age;}set{if(value0value150){_agevalue;}}}/// summary/// 性别/// /summarypublicchar_sex;publiccharSex{get{return_sex;}set{if(value!男value!女){value男;}_sexvalue;}}publicstringAiHao;publicvoidJiBen(){Console.WriteLine($大家好我叫{Name}学号是{Id}我今年{Age}岁是个{Sex}生我的爱好是{AiHao});}}2.2 不使用构造方法的 Main 函数staticvoidMain(string[]args){stringjiXu;do{Console.WriteLine(学生1张三\n学生2李四\n学生3王五\n学生4老六\n学生5改个蛋);Console.WriteLine(请输入要查看的自我介绍的学生代号为);intstudentNumConvert.ToInt32(Console.ReadLine());switch(studentNum){case1:Studentstudent1newStudent();student1.Name张三;student1.Sex男;student1.Age18;student1.Id26310101;student1.AiHao打篮球;student1.JiBen();break;case2:Studentstudent2newStudent();student2.Name李四;student2.Sex男;student2.Age19;student2.Id26310102;student2.AiHao打羽毛球;student2.JiBen();break;case3:Studentstudent3newStudent();student3.Name王五;student3.Sex女;student3.Age18;student3.Id26310103;student3.AiHao打篮球;student3.JiBen();break;case4:Studentstudent4newStudent();student4.Name老六;student4.Sex男;student4.Age19;student4.Id26310104;student4.AiHao踢足球;student4.JiBen();break;case5:Studentstudent5newStudent();student5.Name改个蛋;student5.Sex女;student5.Age18;student5.Id26310105;student5.AiHao打乒乓球;student5.JiBen();break;}Console.WriteLine(是否继续查看y/n);jiXuConsole.ReadLine();}while(jiXuy||jiXuY);}2.3 使用构造方法后的 Main 函数staticvoidMain(string[]args){stringjiXu;do{Console.WriteLine(学生1张三\n学生2李四\n学生3王五\n学生4老六\n学生5改个蛋);Console.WriteLine(请输入要查看的自我介绍的学生代号为);intstudentNumConvert.ToInt32(Console.ReadLine());switch(studentNum){case1:Studentstudent1newStudent(26310101,张三,18,男,打篮球);student1.JiBen();break;case2:Studentstudent2newStudent(26310102,李四,19,男,打羽毛球);student2.JiBen();break;case3:Studentstudent3newStudent(26310103,王五,18,女,打麻将);student3.JiBen();break;case4:Studentstudent4newStudent(26310104,老六,19,男,踢足球);student4.JiBen();break;case5:Studentstudent5newStudent(26310105,改个蛋,18,女,打乒乓球);student5.JiBen();break;}Console.WriteLine(是否继续查看y/n);jiXuConsole.ReadLine();}while(jiXuy||jiXuY);}2.4 构造方法的定义// 在类中// 在没有构造时默认为publicStudent(){}// 构造方法为publicStudent(stringid,stringname,intage,charsex,stringaiHao){Idid;Namename;Ageage;Sexsex;AiHaoaiHao;}三、方法重载指在一个类中定义多个一样的方法名但传入的参数的数量或者数据类型不完全相同。// 定义两个数相加方法的数据类型组合共用四种所以对方法 JiaFa 进行四种重载internalclassJiSuanQi{publicvoidJiaFa(intnum1,intnum2){Console.WriteLine(和为:(num1num2));}publicvoidJiaFa(doublenum1,intnum2){Console.WriteLine(和为:(num1num2));}publicvoidJiaFa(intnum1,doublenum2){Console.WriteLine(和为:(num1num2));}publicvoidJiaFa(doublenum1,doublenum2){Console.WriteLine(和为:(num1num2));}}四、继承与重写4.1 继承今天主要学习了继承和方法的重写。继承子类可以继承父类的属性和方法但是不能继承父类的私有字段。继承具有单根性和传递性单根性一个类只能有一个父类但是一个父类可以有多个子类。传递性继承具有传递性父类非私有的属性和方法可以被子类继承也可以被子类的子类继承。4.2 重写重写子类需要用到一个和父类同名的方法但是从父类继承的方法不能满足子类的需求此时我们在子类重写这个方法它们的形参和返回值都一样但是方法的内容可以改变。4.3 构造方法与 base 关键字如果我们在父类进行了构造方法子类不能直接继承这个构造方法而是要添加base形参例如Student继承Person类。// Person 类中的构造方法publicPerson(stringname,intage,stringsex){this.Namename;this.Ageage;this.Sexsex;}// Student 类中的构造方法publicStudent(stringname,intage,stringsex):base(name,age,sex){}当我们没有在子类重写的构造方法里写内容时会调用父类构造方法里的内容base()里的形参用于返还给父类。五、总结本文通过「学生信息管理系统」案例梳理了面向对象编程的四大核心知识点类与对象通过类封装属性和方法提升代码复用性。构造方法在创建对象时一次性完成属性赋值减少重复代码。方法重载同名方法通过不同参数类型/数量实现多态。继承与重写子类复用父类能力并通过重写满足个性化需求。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

用xmake自动生成Qt .pro文件:构建系统与IDE协作的工程实践 2026/9/26 12:04:11

用xmake自动生成Qt .pro文件:构建系统与IDE协作的工程实践

一说到.pro,很多人第一反应是VMware Workstation Pro,再熟悉一点的可能想到IDA Pro。但在Qt的语境里,.pro是qmake用来描述工程配置的文件,整个Qt Creator打开项目、解析源码、配置编译选项,全靠它。最近我在折腾xmake&…

阅读更多 →
Docker安装避坑全指南:覆盖Linux与Windows的从零实战 2026/9/26 12:04:11

Docker安装避坑全指南:覆盖Linux与Windows的从零实战

装Docker这件事,网上教程一搜一大把,但真到自己动手的时候,各种报错还是能把人折腾到怀疑人生。尤其是Windows和Linux两套玩法完全不一样,镜像拉不下来、服务启动失败、权限报错……每个坑都有无数人踩过。这篇东西我就把几年里装…

阅读更多 →
安卓逆向分析全链路:从APK解包、DEX反编译到Frida Hook实战 2026/9/26 12:04:11

安卓逆向分析全链路:从APK解包、DEX反编译到Frida Hook实战

简介:安卓逆向助手是一款面向Android应用开发者与安全研究人员的图形化逆向工具,旨在降低APK反编译与分析的门槛,让初学者也能快速理解应用内部结构。它把dex转jar、jar反编译Java、资源文件提取、Java视图转换等流程集成到统一界面&#xff…

阅读更多 →
SpringBoot+Vue+MySQL网上租赁系统:从源码到部署全攻略 2026/9/26 12:04:10

SpringBoot+Vue+MySQL网上租赁系统:从源码到部署全攻略

每年到了毕设季和课设季,总有人拿着“网上租赁系统”这个题目来问我有没有能直接跑起来的项目。说实话,这个题目在Java方向几乎是被问得最多的选题之一——它覆盖了一个业务系统该有的完整闭环:用户体系、商品管理、订单流转、状态变更&#…

阅读更多 →
Docker安装实战:从WSL2配置到引擎启动,解决权限与镜像加速 2026/9/26 12:04:10

Docker安装实战:从WSL2配置到引擎启动,解决权限与镜像加速

讲真,Docker 安装这件破事,看着全网教程一大堆,真正能把"装完到跑起来"这条链路讲清楚的没几个。我这些年前前后后帮人处理过上百次 Docker 安装问题,Windows、Linux、macOS 三条路线全踩过坑,发现绝大多数人…

阅读更多 →
国产系统日期控件兼容性实战:原生input与EasyUI深度调优 2026/9/26 12:04:04

国产系统日期控件兼容性实战:原生input与EasyUI深度调优

简介:这是一款轻量级、开箱即用的多语言日期与时间选择控件,面向Web前端开发者,尤其适合需要快速集成国际化日历功能的中后台系统、表单页面或跨区域应用。资源包共15个文件(6个JS核心脚本含WdatePicker.js、calendar.js等&#x…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉