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 实现等。在实际使用中,自定义渲染器是一个复杂的任务…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...