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 添加片段

image-20250716163218220

image-20250716163247466

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; 
    }

}

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐