7、c#面向对象01
·
1 面向对象概念
1.1 设计思想
面向对象是一种软件的设计思想/编程思想 设计思想/编程思想:::解决问题的套路(固定模版 步骤) 编程语言的设计思想:: 面向对象和面向过程
1.2 吃饭
面向对象:找具有帮助我解决问题功能的对象 指挥对象解决问题 对象:现实实物在电脑中的模型/复杂数据 :点外卖、去饭店吃饭(找厨师 点餐) :重点::对象 :语言::c# java python :英文:oop::object oriented programming 面向过程:按动作把解决问题的过程分成多个步骤 逐个步骤去完成 :挖野菜-找稻谷-洗菜--切菜--炒菜--煮米--吃饭--刷碗 :动作 :语言:c c++ :英文:pop:::procedure oriented programming
1.3 泽连斯基自我介绍分析
-
分析
泽连斯基自我介绍 不是把真人拉到电脑中进行介绍 而是虚拟一个与现实泽连斯基数据完全一致的模型 让模型进行自我介绍 模型对于电脑说就是复杂数据 电脑使用数据 必须先声明数据的类型(声明了类型 才能分配存储空间) 思考:泽连斯基的类型--人类型(不是基本数据类型 是引用数据类型 需要创建)
-
步骤分析
-
-
倒推
-
泽连斯基自我介绍---创建泽连斯基模型---声明模型的类型:人类型---创建人类数据类型
-
-
正确步骤
-
创建人类类型--创建人类类型的对象--模型是泽连斯基(不是别人)--模型进行自我介绍
2 面向对象的铁打的四步
2.1 创建类型:描述一类事物
让电脑知道人类这个类型:::让电脑能区分人和非人:::给电脑描述人类型 数据::::代码中表示数据用变量::类型+变量名 名字 性别 年龄 职位 功能::::代码中表示功能用方法::方法 自我介绍 吃饭 演讲 抓壮丁 方法和变量 都是代码 代码的载体是类 定义一个类用于描述人类型::通过变量表示数据 通过方法表示功能
class Person{//描述人类::一类事物
//1 通过变量表示数据
string name;
int age;
string job;
char sex;
//2 通过方法表示功能:::提示oop中的方法 无需再加static
void show(){
Console.WriteLine($"我叫{name},今年{age}岁,我的职位是{job}");
}
void eat(string food){
Console.WriteLine($"{name}正在进餐:吃的是{food}");
}
void zhua(){
Console.WriteLine($"乌克兰万岁,乌克兰必胜!");
}
}
//此步 仅仅是让电脑有人类型的概念 能区分什么是人 什么不是人
2.2 创建人类型的数据:对象
根据Person类 在电脑中创建一个Person类型的对象(数据) 定义对象名接受数据:对象类型 对象名; Person p1; 创建对象并让对象名指向此对象::::::p1=new 类型(); 合并格式:对象类型 对象名=new 对象类型(); 此语句是创建一个Person类型的对象::需要执行必须写在Mian方法中
Person p1=new Person(); //在电脑中根据对人类的描述 创建一个人类型的对象(模型)
2.3 给对象的变量赋值泽连斯基的数据
给对象的变量赋值格式:对象名.变量=值
p1.name="泽连斯基"; p1.sex='男'; p1.age=50; p1.job="喜剧演员"; //此对象就是现实的泽连斯基的模型
2.4 调用对象的方法 解决问题
调用对象的方法格式:对象名.方法名(参数)
p1.show();
2.5 整体代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace demo01
{
internal class demo12OOP_01概念
{
public static void Main() {
//2 根据类创建对象::对象类型 对象名=new 对象类型();
Person p1 = new Person();
//3 给对象的变量赋值
p1.name = "泽连斯基";
p1.sex = '男';
p1.age = 50;
p1.job = "喜剧演员";
//4 调用对象的方法 解决问题
p1.show();
p1.eat("胡萝卜");
p1.zhua();
}
}
//步骤1:创建类型:描述一类事物
class Person {
//通过变量表示数据
public string name;
public int age;
public string job;
public char sex;
//通过方法表示功能
public void show()
{
Console.WriteLine($"我叫{name},今年{age}岁,我的职位是{job}");
}
public void eat(string food)
{
Console.WriteLine($"{name}正在进餐:吃的是{food}");
}
public void zhua()
{
Console.WriteLine($"乌克兰万岁,乌克兰必胜!");
}
}
}
3 类和对象
internal class demo12OOP_02类和对象
{
public static void Main() {
//2 根据类创建对象
Car01 c1 = new Car01();
//3 给对象的变量赋值
c1.chePai = "豫A88888";
c1.speed = 100;
c1.color = '红';
c1.logo = "兰博基尼";
//4调用对象的方法
c1.run();
c1.add(20);
c1.run();
c1.stop();
Car01 c2 = new Car01();
//等号左边:Car01 c2:定义一个Car01类型的对象名::(只能指向一个Car01类型的对象)
//等号右边:new Car01():创建一个Car01类型的对象:
// 此对象拥有Car01类中定义的所有变量(数据)和所有方法(功能)
//=:让左边的对象名指向右边的对象
Car01 c21 = new Car01();
Car01 c22 = new Car01();
//几个new就是几个对象
//c1给对象的变量赋值 与 c21 c22无关
//通过对象名只能设置此对象名指向的唯一的那个对象的变量 与其他对象无关
//对象的变量有默认值::string是"" char是' ' int是0 bool是false
c22.run();//一辆色车正在高速上以0km/h的速度奔跑,车牌是
Car01 c11 = c22;//没有创建对象 只是创建了一个新的对象名c11
//让c11指向c22对应的对象32行的对象::32行的对象 就有两个名字c11 和 c22
c11.chePai = "BMW";
c22.run();
//联系现实生活
//1 虚拟世界:定义类 描述一类事物 现实世界:设计图纸
//2 虚拟世界: 根据类创建对象 现实世界:根据图纸造车
//3 虚拟世界: 给对象的变量赋值 现实世界:上车牌 刷漆 给初始速度
//4 虚拟世界:调用对象的方法 现实世界: 高速飙车
//类::用于创建对象的图纸/工厂
//对象:根据类创建的实物
}
}
//铁打四步
//1 定义类描述一类事物::che
class Car01 {
//1.1 定义变量表示数据
public string chePai;
public char color;
public string logo;
public int speed;
//1.2 定义方法表示功能
public void run() {
Console.WriteLine($"一辆{color}色{logo}车正在高速上以{speed}km/h的速度奔跑,车牌是{chePai}");
}
public void add(int n) {
speed += n;
Console.WriteLine("加速完毕:速度是:" + speed);
}
public void stop() {
speed = 0;
Console.WriteLine("停止:速度是:"+speed);
}
}
4 设置自动创建main方法的快捷方式
4.1 在模版文件夹中创建一个文件:
文件位置: E:\vs\soft\Microsoft Visual Studio\2022\Community\VC#\Snippets\2052\Visual C# 名字是:main.snippet
-
其中的文本是
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>CustomMainMethod</Title>
<Shortcut>main</Shortcut>
<Description>自定义的Main方法代码片段</Description>
</Header>
<Snippet>
<Code Language="csharp">
<![CDATA[
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
Console.ReadLine();
}
]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
4.2 添加片段


4.3 重启vs
4.4 使用
类中写个main 按两下tab键 自动生成Main方法
5 形参和实参
static void Main(string[] args)
{
//调用方法
int aa = 1, bb = 5;
test(aa,bb);//调用方法时 给形参传递数据::实参
test(2, 4);
//定义方法时 方法的参数列表:::形参
//调用方法时 传递的真实数据:::实参
}
//定义方法
static void test(int a,int b) {//a,b是定义方法时设置的参数列表 用于接受原始数据的变量 形参
Console.WriteLine($"a={a},b={b}");
}
6 方法重载
internal class demo04_方法重载
{
/*
概念:方法重载
一个类中 几个方法名字相同 参数列表不同的现象
*/
static void Main(string[] args)
{
//创建对象 调用方法
Student03 s1 = new Student03();
s1.name = "韩梅梅";
int sum1=s1.add(1, 3);
Console.WriteLine("sum1="+sum1);
//方法的返回值 调用者可以选择性接受
s1.add(1,1.1);
s1.add(1,2,3);
//调用的哪个add方法 取决于实参的类型
//实参类型与那个add方法的形参类型一致 调用的就是哪个方法
//两个普通方法之间区分 通过方法名即可区分
//两个重载方法之间区分 不能通过方法名 需要通过参数列表来区分
//多个方法功能基本一样 只是需要的原始数据不同 名字相同 参数列表不同---方法重载
//方法重载的条件 overload
//1 必须是同一个类
//2 方法名必须一样
//3 参数列表不同::数据类型不同、个数不同、顺序不同
}
}
class Student03 {
public string name;
public void hehe() { }
public int add(int a,int b) {
Console.WriteLine("int add(int a,int b)");
return a + b;
}
public double add(int a, double b) {
Console.WriteLine("double add(int a, double b)");
return a + b;
}
public int add(int a, int b,int c) {
Console.WriteLine("int add(int a, int b,int c)");
return a + b+c;
}
public double add(double a, int b) {
Console.WriteLine("double add(double a, int b)");
return a + b;
}
public double add(double a, double b) {
Console.WriteLine("double add(double a, double b)");
return a + b;
}
}
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)