WPF学习(2)--类与类的继承2-在窗口的实现
一、代码分析
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{
解释:定义一个公共类 Animal
。public
关键字表示这个类可以被其他命名空间中的代码访问。
public string Name { get; set; }
解释:定义一个公共属性 Name
。string
是数据类型,表示这个属性存储字符串。{ get; set; }
是属性访问器,表示这个属性可以被读取和写入。
public int Age { get; set; }
解释:定义一个公共属性 Age
。int
是数据类型,表示这个属性存储整数。{ get; set; }
同样表示这个属性可以被读取和写入。
public Animal(string name, int age){Name = name;Age = age;}
解释:定义一个构造函数 Animal
。构造函数是一个特殊的方法,在创建类的实例时调用。public
关键字表示这个构造函数可以被其他代码调用。参数 string name
和 int age
用于初始化 Name
和 Age
属性。
public virtual string 吃饭(){return "我要吃饭";}
解释:定义一个公共的虚方法 吃饭
,返回类型为 string
。virtual
关键字表示这个方法可以在派生类中被重写。方法体返回一个字符串 "我要吃饭"
。
public virtual string Makesound(){return "animal sound";}
解释:定义另一个公共的虚方法 Makesound
,返回类型为 string
。方法体返回一个字符串 "animal sound"
。
public override string ToString(){return $"{Name} (Age:{Age})";}
解释:重写基类 Object
的 ToString
方法。override
关键字表示这是一个重写的方法。方法体返回一个格式化的字符串,包含 Name
和 Age
属性的值。$"{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
,它接受两个参数 name
和 age
,并将它们传递给基类 Animal
的构造函数。base(name, age)
调用基类的构造函数以初始化继承自基类的 Name
和 Age
属性。
public override string Makesound(){return "汪汪!";}
解释:重写基类 Animal
的虚方法 Makesound
。override
关键字表示这是一个重写的方法。这个方法返回一个字符串 "汪汪!"
。
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) 实现了一个简单的动物管理应用程序,具有以下功能:
-
界面布局:
- 主窗口包含三个按钮和一个文本块,用于用户交互和显示结果。
-
按钮功能:
- “DOG” 按钮:点击后创建一个新的
Dog
对象,并将其添加到动物列表Zoo
中。 - “CAT” 按钮:点击后创建一个新的
Cat
对象,并将其添加到动物列表Zoo
中。 - “MAKESOUND” 按钮:点击后遍历
Zoo
列表,获取所有动物的名字、叫声和吃饭行为,并将这些信息显示在文本块中。
- “DOG” 按钮:点击后创建一个新的
-
数据绑定:
- 使用
INotifyPropertyChanged
接口和数据绑定机制,实现数据的动态更新。具体来说,我的实验
类包含一个显示串
属性,当其值发生变化时,通过数据绑定更新显示在界面上的文本块。
- 使用
具体实现细节
-
Animal 类及其派生类:
Animal
类是一个基类,包含Name
和Age
属性,以及虚方法Makesound()
和吃饭()
。Dog
类和Cat
类继承自Animal
类,分别重写了Makesound()
和吃饭()
方法,提供各自特有的实现。
-
MainWindow 类:
- 定义了主窗口的构造函数,初始化组件、动物列表
Zoo
和我的实验
类的实例。 - 定义了三个按钮点击事件处理方法,分别用于添加
Dog
和Cat
对象,以及显示动物的名字、叫声和吃饭行为。
- 定义了主窗口的构造函数,初始化组件、动物列表
-
我的实验类:
- 实现
INotifyPropertyChanged
接口,包含一个显示串
属性,当其值改变时,触发PropertyChanged
事件通知界面更新。
- 实现
-
XAML 布局:
- 使用 XAML 定义主窗口布局,包括三个按钮和一个文本块。
- 使用数据绑定机制,将
我的实验
类的显示串
属性绑定到文本块的Text
属性,实现动态数据展示。
项目功能总结
- 添加动物:用户可以通过点击按钮向动物列表中添加
Dog
和Cat
对象,每个对象的名字包含当前秒数。 - 显示动物信息:点击“MAKESOUND”按钮后,遍历动物列表,显示每个动物的名字、叫声和吃饭行为。
- 数据绑定与动态更新:通过数据绑定机制和
INotifyPropertyChanged
接口,确保界面上的文本块能动态显示最新的动物信息。
相关文章:

WPF学习(2)--类与类的继承2-在窗口的实现
一、代码分析 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…...
Docker面试整理-Docker容器与虚拟机比较,安全性如何?
Docker 容器与传统的虚拟机(VM)在许多方面都不同,其中之一是安全性。每种技术都有其特定的安全特点和潜在的风险。了解这些差异可以帮助你做出更好的决策,适当地使用它们来保障系统安全。 容器与虚拟机的安全性对比: 1. 隔离性: ● 虚拟机:提供较高的隔离性。每个虚拟机…...

Python私教张大鹏 Vue3整合AntDesignVue之Checkbox 多选框
何时使用 在一组可选项中进行多项选择时; 单独使用可以表示两种状态之间的切换,和 switch 类似。区别在于切换 switch 会直接触发状态改变,而 checkbox 一般用于状态标记,需要和提交操作配合。 案例:多选框组件 核心…...

flutter 导出iOS问题3
更新flutter版本后 macminihaomacMiniaodeMini SocialIM % flutter --version Flutter 3.7.12 • channel stable • https://github.com/flutter/flutter.git Framework • revision 4d9e56e694 (1 year, 2 months ago) • 2023-04-17 21:47:46 -0400 Engine • revision 1a6…...
用winform开发一个笔记本电脑是否在充电的小工具
笔记本充电状态有两种监测方式,一种是主动查询,另一种是注册充电状态变化事件 1,先说主动监控吧,建立一个线程,反复查询SystemInformation.PowerStatus.PowerLineStatus private void readPower(){while (true){this.…...

构建汛期智慧水利新生态:EasyCVR视频汇聚监控综合管理方案解析
一、项目背景与目标 随着我国水利事业的不断发展,水利设施的管理与维护工作愈发重要。随着夏季汛期的到来,水利管理工作面临着巨大的挑战。为确保水利设施的安全运行,及时应对可能出现的汛情,建设一套高效、智能的视频监控可视化…...
linux中HADOOP_HOME和JAVA_HOME删除后依然指向旧目录
在Linux系统中,当你删除了HADOOP_HOME和JAVA_HOME环境变量后,它们依然指向旧目录,可能是因为这些变量在其他地方被设置了。以下是一些常见的原因和解决方法: 系统级配置文件: 检查系统级的环境变量配置文件,如/etc/profile、/etc/bashrc、/etc/environment,以及/etc/pro…...

C++中的结构体——结构体案例1_2
案例描述 学校正在做毕设项目,每位老师指导5名学生,总共有3名老师,需求如下 设计学生和老师的结构体,其中在老师的结构体中,有老师的姓名和一个存放5名学生的数组作为成员 学生的成员有姓名、考试分数,创…...

python接入汇率换算工具提高网站/小程序日活度
实时汇率换算工具可以帮助用户快速准确地计算不同货币之间最新的汇兑比例。无论是金融从业者或者是人们日常生活出行都会使用到,广泛用于国际结算、银行汇率查询应用、开展跨国贸易、投资等参考场景。 我们可以通过在网站或者小程序中接入这样一个小工具࿰…...
Ubuntu 网络重置
在 Ubuntu 中,如果遇到可以联网但是无法打开许多网页的问题,这可能是 DNS 设置不正确或者网络配置有误引起的。重置网络配置到默认设置可以帮助解决这类问题。以下是几种方法来重置 Ubuntu 的网络配置: ### 1. 重启网络服务 有时候简单地重启…...
防护DDoS攻击出现的常见误区
很多运维人员会通过自己的一些方式来缓解DDoS攻击,但效果却并不明显,今天蔡蔡就来说说防护DDoS攻击最容易出现哪些误区? 误区一:通过CDN防御DDoS攻击 经常有人认为高防IP这么贵,为什么不用几百块的CDN来预防DDoS&…...

入门 Axure RP 9 | 原型设计基础教程
选择正确的原型设计工具并非易事,Axure RP 9能够快速完成原型设计。原型设计是一种经过时间考验的方法,可以将你的设计快速放置在用户的设备并交到他们手中。替代Axure RP 9的原型设计工具即时设计是一个完全集成的协同设计工具,无需使用不同…...

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

html实现粘贴excel数据,在页面表格中复制
录入数据时,有时候需要把excel中的数据一条条粘贴到页面中,当数据量过多时,这种操作很令人崩溃。本篇文章实现了从excel复制好多行数据后,可在页面粘贴的功能 具体实现代码 <!DOCTYPE html> <html lang"en"> <head…...

WPF视频学习-简单应用篇图书馆程序(一)
1.登录界面和主界面跳转 先把登录界面分为三行《Grid》 先添加两行: <Grid><!--//分三行,行排列--><Grid.RowDefinitions><RowDefinition Height"auto"/><RowDefinition Height"auto"/><RowDef…...

Java+前端+Vue 后端Spring boot 开发的全套UWB定位方案,0.1米高精度定位系统源码
Java前端Vue 后端Spring boot 开发的全套UWB定位方案,0.1米高精度定位系统源码 UWB定位系统由硬件定位设备、定位引擎和应用软件组成。该定位系统应用软件支持PC端和移动端访问,并提供位置实时显示、历史轨迹回放、人员考勤、电子围栏、行为分析、智能巡检等功能…...

Mysql查询分析工具Explain的使用
一、前言 作为一名合格的开发人员,与数据库打交道是必不可少的,尤其是在业务规模和数据体量大规模增长的条件下,应用系统大部分请求读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的&…...
OpenCV中的圆形标靶检测——findCirclesGrid()(一)
如前所述,OpenCV中可以使用findCirclesGrid()实现圆形标靶的检测,该函数的计算流程分为1)斑点形状的检测,和2)基于规则的斑点形状的过滤与定位。第一步将类似圆斑形状的区域检测出来,但可能存在一些误检测的噪声,第二步则利用圆斑的分布规则(M*N排列)进行进一步的过滤…...
2025广州眼博会,2025广东省眼睛健康及眼科产业展览会
广州全国眼睛健康产业博览会暨眼科医学大会,将于2025年4月在广州南丰国际会展中心盛大举办; 广州2025全国眼睛健康产业博览会暨眼科医学大会(全国眼博会) National Eye Health Industry Expo and Ophthalmic Medicine Conference…...
Vue3 自定义渲染器 API createRenderer()(七)
createRenderer() createRenderer() 是一个高级 API,它允许你创建自定义的渲染器。这个 API 主要是为了支持 Vue 的非 DOM 渲染目标,如 WebGL、Canvas、Web Workers、自定义 DOM 实现等。在实际使用中,自定义渲染器是一个复杂的任务…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...