WPF学习(2)--类与类的继承2-在窗口的实现

news2024/11/15 11:46:27

一、代码分析

1.Animal.cs

1.1 代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AnimalNamespace
{
    public class Animal
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public Animal (string name,int age)
        {
           Name = name;
           Age = age;
        }
        public virtual string 吃饭()
        {
            return "我要吃饭";
        }

        public virtual string Makesound()
        {
            return "animal sound";
        }

        public override string ToString()
        {
            return $"{Name} (Age:{Age})";
        }
    }
}

1.2 代码分析

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

解释:这些 using 指令用于引入命名空间,允许你使用这些命名空间中定义的类和方法。System 包含基本的系统功能,Collections.Generic 提供泛型集合类,Linq 用于查询操作,Text 提供处理文本的类,Threading.Tasks 提供并行编程类。

namespace AnimalNamespace
{

解释:定义一个命名空间 AnimalNamespace,用于组织代码并避免命名冲突。在这个命名空间内定义的所有类和方法都属于这个命名空间。

    public class Animal
    {

解释:定义一个公共类 Animalpublic 关键字表示这个类可以被其他命名空间中的代码访问。

        public string Name { get; set; }

解释:定义一个公共属性 Namestring 是数据类型,表示这个属性存储字符串。{ get; set; } 是属性访问器,表示这个属性可以被读取和写入。

        public int Age { get; set; }

解释:定义一个公共属性 Ageint 是数据类型,表示这个属性存储整数。{ get; set; } 同样表示这个属性可以被读取和写入。

        public Animal(string name, int age)
        {
           Name = name;
           Age = age;
        }

解释:定义一个构造函数 Animal。构造函数是一个特殊的方法,在创建类的实例时调用。public 关键字表示这个构造函数可以被其他代码调用。参数 string nameint age 用于初始化 NameAge 属性。

        public virtual string 吃饭()
        {
            return "我要吃饭";
        }

解释:定义一个公共的虚方法 吃饭,返回类型为 stringvirtual 关键字表示这个方法可以在派生类中被重写。方法体返回一个字符串 "我要吃饭"

        public virtual string Makesound()
        {
            return "animal sound";
        }

解释:定义另一个公共的虚方法 Makesound,返回类型为 string。方法体返回一个字符串 "animal sound"

        public override string ToString()
        {
            return $"{Name} (Age:{Age})";
        }

解释:重写基类 ObjectToString 方法。override 关键字表示这是一个重写的方法。方法体返回一个格式化的字符串,包含 NameAge 属性的值。$"{Name} (Age:{Age})" 是 C# 6.0 引入的字符串插值语法,允许在字符串中嵌入表达式。

2.DOG.cs

2.1 代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AnimalNamespace
{
    public class Dog:Animal
    {
        public Dog(string name, int age) : base(name, age) { }

        public override string Makesound()
        {
            return "汪汪!";
        }
        public override string 吃饭()
        {
            return "我要啃骨头";
        }
    }
}

2.2 代码解释

    public class Dog : Animal
    {

解释:定义一个公共类 Dog,它继承自 Animal 类。public 关键字表示这个类可以被其他命名空间中的代码访问。: 表示继承关系,Dog 类继承自 Animal 类,意味着 Dog 类将具有 Animal 类的所有属性和方法。

        public Dog(string name, int age) : base(name, age) { }

解释:定义一个构造函数 Dog,它接受两个参数 nameage,并将它们传递给基类 Animal 的构造函数。base(name, age) 调用基类的构造函数以初始化继承自基类的 NameAge 属性。

        public override string Makesound()
        {
            return "汪汪!";
        }

解释:重写基类 Animal 的虚方法 Makesoundoverride 关键字表示这是一个重写的方法。这个方法返回一个字符串 "汪汪!"

        public override string 吃饭()
        {
            return "我要啃骨头";
        }

解释:重写基类 Animal 的虚方法 吃饭。这个方法返回一个字符串 "我要啃骨头"

3.CAT.cs

3.1 代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AnimalNamespace
{
    public class Cat:Animal
    {
        public Cat(string Name, int age):base(Name, age){ }

        public override string Makesound()
        {
            return "喵喵";
        }
    }
}

3.2 代码解释

同DOG.cs

4.MainWindow.xaml.cs

4.1 代码

using System.ComponentModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using AnimalNamespace;

namespace WpfApp2
{

    public partial class MainWindow : Window
    {

        List<Animal> Zoo;
        private 我的实验 MyText;
        public MainWindow()
        {
            InitializeComponent();
            Zoo = new List<Animal>();
            MyText=new 我的实验();
            MyText.显示串 = "";
            DataContext = new { 我的实验 = MyText };
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Dog x = new Dog("dog" + DateTime.Now.Second.ToString(), DateTime.Now.Second);
            Zoo.Add(x);
            
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Cat x = new Cat("cat" + DateTime.Now.Second.ToString(), DateTime.Now.Second);
            Zoo.Add(x);
        }

        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            string 叫声 = "";
            foreach (Animal animal in Zoo)
            {
                if (animal != null)
                {
                    叫声+=animal .Name +":"+ animal.Makesound()+ ":"+animal.吃饭();
                    叫声 += Environment.NewLine;
                }
            }
            MyText.显示串 = 叫声;

        }
    }

    public class 我的实验 : INotifyPropertyChanged
    {

        private string _显示串;
        public string 显示串
        {
            get { return _显示串; }
            set
            {
                _显示串 = value;
                OnPropertyChanged("显示串");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

4.2 代码解释

    public partial class MainWindow : Window
    {

解释:定义一个公共的部分类 MainWindow,继承自 Window 类。这个类是 WPF 应用程序的主窗口。

        List<Animal> Zoo;
        private 我的实验 MyText;

解释:定义一个 Zoo 列表,用于存储 Animal 类的实例。定义一个私有字段 MyText,类型为 我的实验,用于数据绑定。

        public MainWindow()
        {
            InitializeComponent();
            Zoo = new List<Animal>();
            MyText = new 我的实验();
            MyText.显示串 = "";
            DataContext = new { 我的实验 = MyText };
        }

解释:定义 MainWindow 的构造函数。

  • InitializeComponent():初始化组件,加载 XAML 中定义的 UI 元素。
  • Zoo = new List<Animal>():初始化 Zoo 列表。
  • MyText = new 我的实验():初始化 MyText 实例。
  • MyText.显示串 = "":将 MyText显示串 属性初始化为空字符串。
  • DataContext = new { 我的实验 = MyText }:设置数据上下文,用于数据绑定。
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Dog x = new Dog("dog" + DateTime.Now.Second.ToString(), DateTime.Now.Second);
            Zoo.Add(x);
        }

解释:定义一个按钮点击事件处理方法 Button_Click

  • Dog x = new Dog("dog" + DateTime.Now.Second.ToString(), DateTime.Now.Second):创建一个新的 Dog 实例,名字包括当前秒数。
  • Zoo.Add(x):将新创建的 Dog 实例添加到 Zoo 列表中。
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Cat x = new Cat("cat" + DateTime.Now.Second.ToString(), DateTime.Now.Second);
            Zoo.Add(x);
        }

解释:定义另一个按钮点击事件处理方法 Button_Click_1

  • Cat x = new Cat("cat" + DateTime.Now.Second.ToString(), DateTime.Now.Second):创建一个新的 Cat 实例,名字包括当前秒数。
  • Zoo.Add(x):将新创建的 Cat 实例添加到 Zoo 列表中。
        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            string 叫声 = "";
            foreach (Animal animal in Zoo)
            {
                if (animal != null)
                {
                    叫声 += animal.Name + ":" + animal.Makesound() + ":" + animal.吃饭();
                    叫声 += Environment.NewLine;
                }
            }
            MyText.显示串 = 叫声;
        }

解释:定义第三个按钮点击事件处理方法 Button_Click_2

  • string 叫声 = "":初始化一个空字符串 叫声
  • foreach (Animal animal in Zoo):遍历 Zoo 列表中的每个 Animal 实例。
  • if (animal != null):检查 animal 是否不为 null
  • 叫声 += animal.Name + ":" + animal.Makesound() + ":" + animal.吃饭():将 animal 的名字、叫声和吃饭行为添加到 叫声 字符串中。
  • 叫声 += Environment.NewLine:添加换行符。
  • MyText.显示串 = 叫声:更新 MyText显示串 属性。
    public class 我的实验 : INotifyPropertyChanged
    {

解释:定义一个公共类 我的实验,实现 INotifyPropertyChanged 接口。这个接口用于通知属性值的更改。

        private string _显示串;
        public string 显示串
        {
            get { return _显示串; }
            set
            {
                _显示串 = value;
                OnPropertyChanged("显示串");
            }
        }

解释:定义一个私有字段 _显示串 和一个公共属性 显示串

  • get { return _显示串; }:返回 _显示串 的值。
  • set { _显示串 = value; OnPropertyChanged("显示串"); }:设置 _显示串 的值,并调用 OnPropertyChanged("显示串") 方法通知属性值的更改。
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

解释

  • public event PropertyChangedEventHandler PropertyChanged:定义一个 PropertyChanged 事件,用于通知属性值的更改。
  • protected virtual void OnPropertyChanged(string propertyName):定义一个受保护的虚方法 OnPropertyChanged,用于触发 PropertyChanged 事件。
  • PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)):如果 PropertyChanged 事件不为空,则触发该事件,并传递 propertyName 参数。

5.MainWindow.xaml

5.1 代码

<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

    <Grid>
        <Button Content="DOG" HorizontalAlignment="Left" Height="67" Margin="71,49,0,0" VerticalAlignment="Top" Width="120" Click="Button_Click"/>
        <Button Content="CAT" HorizontalAlignment="Left" Height="67" Margin="212,49,0,0" VerticalAlignment="Top" Width="120" Click="Button_Click_1"/>
        <Button Content="MAKESOUND" HorizontalAlignment="Left" Height="67" Margin="355,49,0,0" VerticalAlignment="Top" Width="120" Click="Button_Click_2"/>
        <TextBlock x:Name="OutputTextBlock" HorizontalAlignment="Left" Height="183" Margin="71,140,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="404" FontSize="16"
             Text="{Binding 我的实验.显示串}"  />
    </Grid>
</Window>

5.2 代码解释

<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

解释

  • <Window> 标签定义了一个 WPF 窗口。
  • x:Class="WpfApp2.MainWindow":指定这个窗口的关联类是 WpfApp2.MainWindow
  • xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation":定义 XAML 的默认命名空间,用于 WPF 控件。
  • xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml":定义 XAML 的 X 命名空间,用于 XAML 语言功能。
  • xmlns:d="http://schemas.microsoft.com/expression/blend/2008":定义设计时支持的命名空间。
  • xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006":定义标记兼容性的命名空间。
  • xmlns:local="clr-namespace:WpfApp2":定义本地命名空间 WpfApp2,用于引用同一个命名空间内的类型。
  • mc:Ignorable="d":指示设计时命名空间中的内容在运行时可以忽略。
  • Title="MainWindow":设置窗口的标题为 "MainWindow"。
  • Height="450"Width="800":设置窗口的高度为 450 像素,宽度为 800 像素。
    <Grid>
        <Button Content="DOG" HorizontalAlignment="Left" Height="67" Margin="71,49,0,0" VerticalAlignment="Top" Width="120" Click="Button_Click"/>
        <Button Content="CAT" HorizontalAlignment="Left" Height="67" Margin="212,49,0,0" VerticalAlignment="Top" Width="120" Click="Button_Click_1"/>
        <Button Content="MAKESOUND" HorizontalAlignment="Left" Height="67" Margin="355,49,0,0" VerticalAlignment="Top" Width="120" Click="Button_Click_2"/>
        <TextBlock x:Name="OutputTextBlock" HorizontalAlignment="Left" Height="183" Margin="71,140,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="404" FontSize="16"
             Text="{Binding 我的实验.显示串}"  />
    </Grid>
</Window>

解释

  • <Grid>:定义一个网格布局容器,用于组织其子元素。

  • <Button>:定义一个按钮控件。

    • Content="DOG":按钮上的文本为 "DOG"。
    • HorizontalAlignment="Left":按钮水平左对齐。
    • Height="67":按钮高度为 67 像素。
    • Margin="71,49,0,0":按钮的外边距,分别是左、上、右、下(左边距 71 像素,上边距 49 像素)。
    • VerticalAlignment="Top":按钮垂直顶部对齐。
    • Width="120":按钮宽度为 120 像素。
    • Click="Button_Click":单击按钮时调用 Button_Click 方法。
  • 第二个 <Button> 控件类似,只是内容为 "CAT",外边距不同(左边距 212 像素),单击事件处理方法为 Button_Click_1

  • 第三个 <Button> 控件内容为 "MAKESOUND",外边距不同(左边距 355 像素),单击事件处理方法为 Button_Click_2

  • <TextBlock>:定义一个文本块控件,用于显示文本。

    • x:Name="OutputTextBlock":设置控件的名称为 OutputTextBlock
    • HorizontalAlignment="Left":文本块水平左对齐。
    • Height="183":文本块高度为 183 像素。
    • Margin="71,140,0,0":文本块的外边距,分别是左、上、右、下(左边距 71 像素,上边距 140 像素)。
    • TextWrapping="Wrap":文本自动换行。
    • VerticalAlignment="Top":文本块垂直顶部对齐。
    • Width="404":文本块宽度为 404 像素。
    • FontSize="16":文本块的字体大小为 16 像素。
    • Text="{Binding 我的实验.显示串}":通过数据绑定将 我的实验 类的 显示串 属性绑定到文本块的文本属性。

二、实验结果

在这个过程中我依次点击了2次DOG、1次CAT、1次DOG、1次CAT,最后点击MAKESOUND使它们发出相同的行为,结果如下。

总结

这个项目通过 WPF (Windows Presentation Foundation) 实现了一个简单的动物管理应用程序,具有以下功能:

  1. 界面布局

    • 主窗口包含三个按钮和一个文本块,用于用户交互和显示结果。
  2. 按钮功能

    • “DOG” 按钮:点击后创建一个新的 Dog 对象,并将其添加到动物列表 Zoo 中。
    • “CAT” 按钮:点击后创建一个新的 Cat 对象,并将其添加到动物列表 Zoo 中。
    • “MAKESOUND” 按钮:点击后遍历 Zoo 列表,获取所有动物的名字、叫声和吃饭行为,并将这些信息显示在文本块中。
  3. 数据绑定

    • 使用 INotifyPropertyChanged 接口和数据绑定机制,实现数据的动态更新。具体来说,我的实验 类包含一个 显示串 属性,当其值发生变化时,通过数据绑定更新显示在界面上的文本块。

具体实现细节

  1. Animal 类及其派生类

    • Animal 类是一个基类,包含 NameAge 属性,以及虚方法 Makesound()吃饭()
    • Dog 类和 Cat 类继承自 Animal 类,分别重写了 Makesound()吃饭() 方法,提供各自特有的实现。
  2. MainWindow 类

    • 定义了主窗口的构造函数,初始化组件、动物列表 Zoo我的实验 类的实例。
    • 定义了三个按钮点击事件处理方法,分别用于添加 DogCat 对象,以及显示动物的名字、叫声和吃饭行为。
  3. 我的实验类

    • 实现 INotifyPropertyChanged 接口,包含一个 显示串 属性,当其值改变时,触发 PropertyChanged 事件通知界面更新。
  4. XAML 布局

    • 使用 XAML 定义主窗口布局,包括三个按钮和一个文本块。
    • 使用数据绑定机制,将 我的实验 类的 显示串 属性绑定到文本块的 Text 属性,实现动态数据展示。

项目功能总结

  • 添加动物:用户可以通过点击按钮向动物列表中添加 DogCat 对象,每个对象的名字包含当前秒数。
  • 显示动物信息:点击“MAKESOUND”按钮后,遍历动物列表,显示每个动物的名字、叫声和吃饭行为。
  • 数据绑定与动态更新:通过数据绑定机制和 INotifyPropertyChanged 接口,确保界面上的文本块能动态显示最新的动物信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1818689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四、STP(生成树协议)

目录 一、经典生成树&#xff08;STP&#xff09; 1.1、作用 1.2、重要参数 1.3、BPDU 1.4、STP计算过程 1.5、STP接口状态 二、快速生成树&#xff08;RTSP&#xff09; 2.1、端口角色的增补 2.2、端口状态简化 2.3、配置BPDU报文修改 2.4、配置BPDU的处理 2.5、快…

从零开始手把手Vue3+TypeScript+ElementPlus管理后台项目实战十一(整体布局04之Header及用户注销)

新增Hearder 新增 src/layout/components/PageHeader.vue <template><div class"header-cont"><div><h1><router-link to"/">RealWorld</router-link></h1></div><div><template v-if"is…

ESP32-C6 闪耀 Apple WWDC24|使用 Embedded Swift 构建 Matter 设备

WWDC 是苹果公司的年度全球开发者大会&#xff0c;旨在向全球开发者展示最新技术和工具。在今年的 WWDC 2024 上&#xff0c;苹果宣布将 Swift 语言扩展至嵌入式设备领域。大会技术讲座中&#xff0c;乐鑫 ESP32-C6 也现身官方 Demo “Go Small with Embedded Swift​​​​​​…

Python-json模块

一、相关概念 # 序列号 和反序列号 # 序列号&#xff1a;把内存中的数据类型转成一种特定格式&#xff0c;这种格式&#xff08;json/pickle&#xff09;可以用于存储&#xff0c;或者传输给其他平台 import json # 内存中是数据类型 ----> 序列化 ----> 特定格式&…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 6月13日,星期四

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年6月13日 星期四 农历五月初八 1、 财政部&#xff1a;将在19日第一次续发行2024年20年期超长期特别国债。 2、 成本低&#xff0c;商载高&#xff0c;我国自主研制HH-100商用无人运输机首飞成功。 3、 四川甘孜州石渠县1…

水利水电安全员B类精选试题(附答案)

第1题:职业病病人除依法享有工伤保险外&#xff0c;依照有关民事法律&#xff0c;尚有获得赔偿的权利&#xff0c;有权向()提出赔偿要求。 | A.当地人民政府 B.医疗机构 C.企业主管部门 D.用人单位 正确答案:D 第2题:事故预防对策中()是利用法律.规程.标准以及规章制度等必要…

ChatGPT面试指南来袭!10个提示词助你应对自如

面试时刻,你准备充分了吗?许多求职者即将面对的面试,仿佛一场无形的战斗。关键的面试问题,犹如一个个智勇双全的敌人。那么,如何才能在这场战斗中取胜?本文为你提供面试中的十大秘密武器——提示词。正确使用提示词,你可以破解面试官的难题,从容应对各种困境。别小看这十个小…

SpringBoot集成mqtt上下线提醒功能设计

目录 1.首先安装emqx&#xff0c;去官网下载emqx压缩包&#xff0c;并且解压。 2.使用emqx start 命令启动emqx后台管理 3.下载mqttx调试工具&#xff0c;使用mqttx调试mqtt连接。下载地址:MQTTX下载-MQTTX官方版下载,下载完成直接打开&#xff0c;便可进行mqtt连接调试 4.…

ping: www.baidu.com: 未知的名称或服务(IP号不匹配)

我用的是VMware上的Red Hat Enterprise Linux 9&#xff0c;出现了能联网但ping不通外网的情况。 问题描述&#xff1a;设置中显示正常连接&#xff0c;而且虚拟机右上角有联网的图标&#xff0c;但不能通外网。 按照网上教程修改了/etc/resolv.conf和/etc/sysconfig/network-…

公交车载视频监控系统解决方案

公交车载视频监控系统基于iVMS-7200移动视频监控管理平台&#xff0c;通过3G/4G网络接入车载前端&#xff0c;实现实时监控、录像回放、GIS地图定位、轨迹回放、设备状态查询、紧急报警等功能。 车载前端包含车载硬盘录像机(简称车载DVR或MDVR)、车载专用摄像机、车载LCD显示屏…

谷粒商城实战(035 k8s集群学习1-前置介绍)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第339p-第p342的内容 分布式高级篇总结 高可用集群 内容 k8s介绍 为什么使用k8s 组件 master组件 node&#xff08;节点&#xff09;组件 要部…

操作系统——信号

将信号分为以上四个阶段 1.信号注册&#xff1a;是针对信号处理方式的规定&#xff0c;进程收到信号时有三种处理方式&#xff1a;默认动作&#xff0c;忽略&#xff0c;自定义动作。如果不是自定义动作&#xff0c;这一步可以忽略。这个步骤要使用到signal/sigaction接口 2.…

代码随想录算法训练营第五十八天 | 392.判断子序列

392.判断子序列 题目链接&#xff1a;代码随想录 视频讲解&#xff1a;动态规划&#xff0c;用相似思路解决复杂问题 | LeetCode&#xff1a;392.判断子序列_哔哩哔哩_bilibili 解题思路 本题和求最长公共子序列是一样的&#xff0c;值就是s字符串的长度&#xff0c;如果一致…

不吃饭也要搞懂的 git 命令

昨天睿哥布置了一个任务给我&#xff0c;让我学习一下 Git 的一些命令。 我问睿哥&#xff0c;到底我们在实际开发中用哪些命令会比较多&#xff0c;睿哥是这样回答我的&#xff1a; 而且他推荐我用 IDEA 自带的那个 Git 面板来执行 git 命令&#xff0c;他说直接敲命令太麻烦…

一线大厂都在高薪抢AI产品经理?

哈喽&#xff0c;大家下午好呀&#xff5e; 当AI的风吹到产品届&#xff0c;唯叹相见恨晚&#xff01; 作为一名产品经理&#xff0c;日常写调研、需求分析、产品设计、项目管理、数据分析……每一项工作都需要投入大量的时间和精力。 但用上AI后&#xff0c;你会发现写个需…

【面经总结】Java基础 - IO

序列化 什么是序列化和反序列化&#xff1f; 序列化&#xff1a;将对象转换为二进制数据 反序列化&#xff1a;将二进制数据转换为对象 目的&#xff1a;方便网络传输、持久化保存 Java 是怎么实现序列化的&#xff1f; Java 通过对象输入输出流来实现序列化和反序列化&a…

关于docker无法正常下载镜像的问题

文章目录 之前还可以正常下载镜像&#xff0c;但是一段时间之后就无法下载了&#xff0c;猜测可能是政治原因&#xff0c;无法连接到国外服务器&#xff0c;所以我设置了阿里云的镜像加速器。 配置方法如下&#xff1a; 前往阿里云&#xff08;https://help.aliyun.com/zh/acr/…

Windows同一文件夹下支持大小写同名文件

举例&#xff1a;同一文件目录下需要存在A.java, a.java, Windows是不支持的&#xff0c;这时候需要建一个Linux子系统的文件夹 创建教程 1、在启用或关闭Windows功能下面找到 适用于Linux系统的Windows子系统 2、cmd 执行命令 fsutil file SetCaseSensitiveInfo 文件夹路径 …

网格简化技术在AI绘画中的革新应用

随着人工智能技术的飞速发展&#xff0c;AI绘画作为其创新应用领域之一&#xff0c;正逐渐进入公众的视野。AI绘画不仅为艺术家和设计师提供了强大的辅助工具&#xff0c;也为非专业人士开启了艺术创作的大门。然而&#xff0c;高质量的AI绘画往往需要复杂的计算过程&#xff0…

C# WPF入门学习主线篇(二十七)—— 数据源

C# WPF入门学习主线篇&#xff08;二十七&#xff09;—— 数据源 在WPF开发中&#xff0c;数据绑定是一个强大的功能&#xff0c;它允许UI元素和数据源之间进行双向通信。理解和使用数据源对于创建高效和动态的应用程序至关重要。在本文中&#xff0c;我们将详细介绍WPF中的数…