WPF 与 C# 开发深度剖析

news2025/3/30 3:50:51

一、引言

在当今的软件开发领域,Windows 平台依旧占据着重要的地位。而 WPF(Windows Presentation Foundation)作为微软推出的一款强大的用户界面(UI)框架,为开发者提供了丰富的功能和灵活的设计方式,能够创建出极具视觉冲击力和交互性的应用程序。C# 作为一种现代、面向对象的编程语言,与 WPF 紧密结合,成为了开发 Windows 应用程序的理想选择。本文将深入探讨 WPF 和 C# 的相关知识,从基础概念到高级应用,为开发者全面介绍如何利用这两者进行高效的应用开发。

二、C# 语言基础

2.1 数据类型与变量

2.1.1 值类型

C# 中的值类型直接存储数据的值,包括整数类型(如byteshortintlong)、浮点类型(floatdouble)、布尔类型(bool)和字符类型(char)等。例如:

int number = 10;
double price = 9.99;
bool isAvailable = true;
char letter = 'A';

不同的值类型在内存中占用的空间大小不同,开发者需要根据实际需求选择合适的数据类型,以优化内存使用。

2.1.2 引用类型

引用类型存储的是数据的引用,而不是数据本身。常见的引用类型有类(class)、接口(interface)、数组(array)和委托(delegate)等。例如,定义一个简单的类:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

使用该类创建对象:

Person person = new Person();
person.Name = "John";
person.Age = 30;
2.1.3 变量声明与初始化

在 C# 中,变量必须先声明后使用。声明变量时需要指定数据类型,并且可以选择在声明时进行初始化。例如:

int count; // 声明变量
count = 5; // 初始化变量

string message = "Hello, World!"; // 声明并初始化变量

2.2 控制结构

2.2.1 条件语句

条件语句用于根据不同的条件执行不同的代码块。常见的条件语句有if-elseswitch

  • if-else语句:
int score = 80;
if (score >= 90)
{
    Console.WriteLine("优秀");
}
else if (score >= 80)
{
    Console.WriteLine("良好");
}
else if (score >= 60)
{
    Console.WriteLine("及格");
}
else
{
    Console.WriteLine("不及格");
}

  • switch语句:
int day = 3;
switch (day)
{
    case 1:
        Console.WriteLine("星期一");
        break;
    case 2:
        Console.WriteLine("星期二");
        break;
    case 3:
        Console.WriteLine("星期三");
        break;
    default:
        Console.WriteLine("其他");
        break;
}
2.2.2 循环语句

循环语句用于重复执行一段代码。常见的循环语句有forwhiledo-while

  • for循环:
for (int i = 0; i < 5; i++)
{
    Console.WriteLine(i);
}

  • while循环:
int j = 0;
while (j < 5)
{
    Console.WriteLine(j);
    j++;
}

  • do-while循环:
int k = 0;
do
{
    Console.WriteLine(k);
    k++;
} while (k < 5);

2.3 方法与类

2.3.1 方法定义与调用

方法是一段具有特定功能的代码块,可以接收参数并返回值。定义方法的语法如下:

public int Add(int a, int b)
{
    return a + b;
}

调用方法:

int result = Add(3, 5);
Console.WriteLine(result);
2.3.2 类的概念与使用

类是一种用户自定义的数据类型,它封装了数据和行为。类可以包含字段、属性、方法等成员。例如:

class Rectangle
{
    private double length;
    private double width;

    public Rectangle(double length, double width)
    {
        this.length = length;
        this.width = width;
    }

    public double Area()
    {
        return length * width;
    }
}

使用类创建对象并调用方法:

Rectangle rect = new Rectangle(5, 3);
double area = rect.Area();
Console.WriteLine(area);

2.4 继承与多态

2.4.1 继承

继承是面向对象编程的重要特性之一,它允许一个类继承另一个类的属性和方法。被继承的类称为基类(父类),继承的类称为派生类(子类)。例如:

class Animal
{
    public void Eat()
    {
        Console.WriteLine("动物吃东西");
    }
}

class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine("狗叫");
    }
}

使用派生类:

Dog dog = new Dog();
dog.Eat();
dog.Bark();
2.4.2 多态

多态允许不同的对象对同一消息做出不同的响应。在 C# 中,多态可以通过方法重写和接口实现。例如,使用方法重写实现多态:

class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("绘制形状");
    }
}

class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("绘制圆形");
    }
}

class Square : Shape
{
    public override void Draw()
    {
        Console.WriteLine("绘制正方形");
    }
}

使用多态:

Shape[] shapes = { new Circle(), new Square() };
foreach (Shape shape in shapes)
{
    shape.Draw();
}

三、WPF 基础概念

3.1 WPF 概述

WPF 是微软为 Windows 平台开发的下一代用户界面框架,它引入了全新的图形渲染引擎,支持硬件加速,能够创建出高质量的 2D 和 3D 图形界面。WPF 使用 XAML(可扩展应用程序标记语言)来描述用户界面,使得界面设计和代码逻辑分离,提高了开发效率和可维护性。

3.2 XAML 基础

3.2.1 XAML 语法

XAML 是一种基于 XML 的标记语言,用于定义 WPF 应用程序的用户界面。XAML 的基本语法与 XML 类似,使用标签来表示控件和元素。例如,创建一个简单的窗口:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="My Window" Height="350" Width="525">
    <Grid>
        <Button Content="Click Me" HorizontalAlignment="Left" Margin="100,100,0,0" VerticalAlignment="Top"/>
    </Grid>
</Window>
3.2.2 控件使用

WPF 提供了丰富的控件,如按钮(Button)、文本框(TextBox)、标签(Label)等。可以在 XAML 中直接使用这些控件来构建界面。例如:

<StackPanel>
    <Label Content="请输入姓名:"/>
    <TextBox Name="txtName"/>
    <Button Content="提交" Click="Button_Click"/>
</StackPanel>

在代码隐藏文件中处理按钮点击事件:

private void Button_Click(object sender, RoutedEventArgs e)
{
    string name = txtName.Text;
    MessageBox.Show($"你输入的姓名是:{name}");
}

3.3 布局管理

3.3.1 布局控件

WPF 提供了多种布局控件,用于管理界面中控件的排列和大小。常见的布局控件有GridStackPanelWrapPanel等。

  • Grid:将界面划分为行和列的网格,控件可以放置在指定的单元格中。例如:
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Label Content="用户名:" Grid.Row="0" Grid.Column="0"/>
    <TextBox Grid.Row="0" Grid.Column="1"/>
    <Label Content="密码:" Grid.Row="1" Grid.Column="0"/>
    <PasswordBox Grid.Row="1" Grid.Column="1"/>
</Grid>

  • StackPanel:按顺序排列子控件,可以是水平排列或垂直排列。例如:
<StackPanel Orientation="Horizontal">
    <Button Content="按钮1"/>
    <Button Content="按钮2"/>
    <Button Content="按钮3"/>
</StackPanel>

  • WrapPanel:当子控件超出其宽度或高度时,会自动换行或换列排列。
<WrapPanel>
    <Button Content="按钮1"/>
    <Button Content="按钮2"/>
    <Button Content="按钮3"/>
    <Button Content="按钮4"/>
    <Button Content="按钮5"/>
</WrapPanel>
3.3.2 布局属性

每个布局控件都有一些属性可以用来控制子控件的布局,如Margin(外边距)、Padding(内边距)、HorizontalAlignment(水平对齐方式)和VerticalAlignment(垂直对齐方式)等。例如:

<Button Content="居中按钮" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="20"/>

四、WPF 数据绑定

4.1 数据绑定基础

4.1.1 数据绑定概念

数据绑定是 WPF 的核心特性之一,它允许将 UI 元素的属性与数据源的属性进行关联,当数据源的属性值发生变化时,UI 元素会自动更新;反之,当 UI 元素的属性值发生变化时,数据源的属性也可以得到更新。

4.1.2 简单数据绑定示例

假设有一个Person类:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

在 XAML 中进行数据绑定:

<StackPanel>
    <TextBlock Text="{Binding Name}"/>
    <TextBlock Text="{Binding Age}"/>
</StackPanel>

在代码隐藏文件中设置数据上下文:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Person person = new Person { Name = "Tom", Age = 25 };
        DataContext = person;
    }
}

4.2 数据绑定模式

4.2.1 单向绑定

单向绑定是指数据源的属性值发生变化时,UI 元素会更新,但 UI 元素的变化不会影响数据源。使用Mode=OneWay来指定单向绑定。例如:

<TextBlock Text="{Binding Name, Mode=OneWay}"/>
4.2.2 双向绑定

双向绑定允许数据源和 UI 元素之间的相互更新。使用Mode=TwoWay来指定双向绑定。例如:

<TextBox Text="{Binding Name, Mode=TwoWay}"/>
4.2.3 单向到源绑定

单向到源绑定是指 UI 元素的变化会更新数据源,但数据源的变化不会影响 UI 元素。使用Mode=OneWayToSource来指定单向到源绑定。

4.3 数据模板

4.3.1 数据模板概念

数据模板用于定义如何显示数据源中的数据。可以使用数据模板来定制列表框、组合框等控件中数据的显示方式。

4.3.2 数据模板示例

假设有一个Employee类:

public class Employee
{
    public string Name { get; set; }
    public int EmployeeId { get; set; }
}

在 XAML 中定义数据模板:

<Window.Resources>
    <DataTemplate x:Key="EmployeeTemplate">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Name}" Margin="5"/>
            <TextBlock Text="{Binding EmployeeId}" Margin="5"/>
        </StackPanel>
    </DataTemplate>
</Window.Resources>
<ListBox ItemsSource="{Binding Employees}" ItemTemplate="{StaticResource EmployeeTemplate}"/>

在代码隐藏文件中设置数据源:

public partial class MainWindow : Window
{
    public ObservableCollection<Employee> Employees { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        Employees = new ObservableCollection<Employee>
        {
            new Employee { Name = "Alice", EmployeeId = 1 },
            new Employee { Name = "Bob", EmployeeId = 2 }
        };
        DataContext = this;
    }
}

五、WPF 样式与模板

5.1 样式基础

5.1.1 样式概念

样式是一组属性值的集合,用于定义控件的外观和行为。可以使用样式来统一应用程序中相同类型控件的外观。

5.1.2 样式定义与使用

在 XAML 中定义样式:

<Window.Resources>
    <Style TargetType="Button">
        <Setter Property="Background" Value="LightBlue"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="FontSize" Value="16"/>
    </Style>
</Window.Resources>
<Button Content="Styled Button"/>

5.2 模板基础

5.2.1 模板概念

模板用于定义控件的可视化结构。可以使用模板来完全自定义控件的外观。

5.2.2 模板定义与使用

例如,自定义按钮的模板:

<Window.Resources>
    <Style TargetType="Button">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            CornerRadius="5">
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Button Content="Custom Button"/>

5.3 资源管理

5.3.1 资源概念

资源是可以在应用程序中重复使用的对象,如样式、模板、图像等。可以将资源定义在 XAML 的Resources部分,然后在需要的地方引用。

5.3.2 资源的使用

例如,定义一个颜色资源并在样式中使用:

<Window.Resources>
    <SolidColorBrush x:Key="MyButtonBackground" Color="Green"/>
    <Style TargetType="Button">
        <Setter Property="Background" Value="{StaticResource MyButtonBackground}"/>
    </Style>
</Window.Resources>
<Button Content="Button with Resource"/>

六、WPF 动画与多媒体

6.1 动画基础

6.1.1 动画概念

动画是通过在一段时间内改变控件的属性值来创建动态效果的技术。WPF 提供了强大的动画支持,包括属性动画、关键帧动画等。

6.1.2 属性动画示例

例如,创建一个按钮的淡入动画:

<Window.Resources>
    <Storyboard x:Key="FadeInStoryboard">
        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                         From="0" To="1" Duration="0:0:1"/>
    </Storyboard>
</Window.Resources>
<Button Content="Animated Button" Opacity="0">
    <Button.Triggers>
        <EventTrigger RoutedEvent="Button.Loaded">
            <BeginStoryboard Storyboard="{StaticResource FadeInStoryboard}"/>
        </EventTrigger>
    </Button.Triggers>
</Button>

6.2 多媒体支持

6.2.1 音频播放

可以使用MediaElement控件来播放音频文件。例如:

<MediaElement Source="music.mp3" AutoPlay="True"/>
6.2.2 视频播放

同样,MediaElement控件也可以用于播放视频文件。例如:

<MediaElement Source="video.mp4" Width="640" Height="360"/>

七、WPF 命令与事件

7.1 命令基础

7.1.1 命令概念

命令是一种抽象的操作,它将操作的定义和执行分离。WPF 提供了命令模式,使得代码更加模块化和可维护。

7.1.2 自定义命令示例

定义一个自定义命令:

public class MyCommand : ICommand
{
    public event EventHandler CanExecuteChanged;

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        MessageBox.Show("命令已执行");
    }
}

在 XAML 中使用自定义命令:

<Button Content="执行命令" Command="{Binding MyCommand}"/>

在代码隐藏文件中设置命令:

public partial class MainWindow : Window
{
    public MyCommand MyCommand { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        MyCommand = new MyCommand();
        DataContext = this;
    }
}

7.2 事件处理

7.2.1 事件概念

事件是对象之间通信的一种机制,当某个特定的操作发生时,对象会触发相应的事件。在 WPF 中,控件有许多内置的事件,如按钮的Click事件、文本框的TextChanged事件等。

7.2.2 事件处理示例

例如,处理按钮的Click事件:

<Button Content="点击我" Click="Button_Click"/>

在代码隐藏文件中实现事件处理方法:

private void Button_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("按钮被点击了");
}

八、WPF 应用开发实践

8.1 项目创建与配置

8.1.1 创建 WPF 项目

在 Visual Studio 中,可以通过选择 “创建新项目”,然后选择 “WPF 应用程序” 模板来创建一个新的 WPF 项目。

8.1.2 项目配置

可以对项目的属性进行配置,如设置应用程序的图标、启动窗口等。

8.2 界面设计与布局

8.2.1 设计思路

在进行界面设计时,需要考虑用户体验和界面的美观性。可以使用布局控件来合理安排控件的位置和大小。

8.2.2 示例界面设计

例如,设计一个登录界面:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="登录界面" Height="300" Width="400">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Label Content="用户名:" Grid.Row="0" Grid.Column="0" Margin="10"/>
        <TextBox Grid.Row="0" Grid.Column="1" Margin="10"/>
        <Label Content="密码:" Grid.Row="1" Grid.Column="0" Margin="10"/>
        <PasswordBox Grid.Row="1" Grid.Column="1" Margin="10"/>
        <Button Content="登录" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="10"/>
    </Grid>
</Window>

8.3 功能实现与测试

8.3.1 功能实现

根据应用程序的需求,实现相应的功能。例如,在登录界面中实现登录验证功能:

private void Button_Click(object sender, RoutedEventArgs e)
{
    string username = txtUsername.Text;
    string password = txtPassword.Password;
    if (username == "admin" && password == "123456")
    {
        MessageBox.Show("登录成功");
    }
    else
    {
        MessageBox.Show("用户名或密码错误");
    }
}
8.3.2 测试

在开发过程中,需要对应用程序进行测试,确保其功能正常。可以使用单元测试框架来进行单元测试,也可以进行手动测试。

九、WPF 高级特性

9.1 依赖属性

9.1.1 依赖属性概念

依赖属性是 WPF 中一种特殊的属性,它可以从父元素继承值,支持样式、数据绑定和动画等功能。

9.1.2 依赖属性定义与使用

例如,定义一个自定义依赖属性:

public class MyUserControl : UserControl
{
    public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register("MyProperty", typeof(string), typeof(MyUserControl),
        new FrameworkPropertyMetadata("Default value"));

    public string MyProperty
    {
        get { return (string)GetValue(MyPropertyProperty); }
        set { SetValue(MyPropertyProperty, value); }
    }
}

在 XAML 中使用自定义依赖属性:

<local:MyUserControl MyProperty="Custom value"/>

9.2 路由事件

9.2.1 路由事件概念

路由事件是 WPF 中的一种特殊事件,它可以在可视化树中向上或向下传播。

9.2.2 路由事件示例

例如,自定义一个路由事件:

public class MyControl : Control
{
    public static readonly RoutedEvent MyEvent =
        EventManager.RegisterRoutedEvent("MyEvent", RoutingStrategy.Bubble,
        typeof(RoutedEventHandler), typeof(MyControl));

    public event RoutedEventHandler MyEvent
    {
        add { AddHandler(MyEvent, value); }
        remove { RemoveHandler(MyEvent, value); }
    }

    public void RaiseMyEvent()
    {
        RoutedEventArgs newEventArgs = new RoutedEventArgs(MyControl.MyEvent);
        RaiseEvent(newEventArgs);
    }
}

在 XAML 中处理自定义路由事件:

<local:MyControl MyEvent="MyControl_MyEvent"/>

在代码隐藏文件中实现事件处理方法:

private void MyControl_MyEvent(object sender, RoutedEventArgs e)
{
    MessageBox.Show("自定义路由事件被触发");
}

9.3 3D 图形与可视化

9.3.1 3D 图形基础

WPF 支持 3D 图形的创建和渲染。可以使用Viewport3D控件来创建 3D 场景,使用GeometryModel3DMeshGeometry3D等类来定义 3D 模型。

9.3.2 3D 图形示例

例如,创建一个简单的 3D 立方体:

<Viewport3D>
    <Viewport3D.Camera>
        <PerspectiveCamera Position="0, 0, 5" LookDirection="0, 0, -1" UpDirection="0, 1, 0"/>
    </Viewport3D.Camera>
    <ModelVisual3D>
        <ModelVisual3D.Content>
            <DirectionalLight Color="White" Direction="-1, -1, -1"/>
        </ModelVisual3D.Content>
    </ModelVisual3D>
    <ModelVisual3D>
        <ModelVisual3D.Content>
            <GeometryModel3D>
                <GeometryModel3D.Geometry>
                    <MeshGeometry3D Positions="-1,-1,-1 1,-1,-1 1,1,-1 -1,1,-1 -1,-1,1 1,-1,1 1,1,1 -1,1,1"
                                    TriangleIndices="0 1 2 2 3 0 1 5 6 6 2 1 5 4 7 7 6 5 4 0 3 3 7 4 3 2 6 6 7 3 4 5 1 1 0 4"/>
                </GeometryModel3D.Geometry>
                <GeometryModel3D.Material>
                    <DiffuseMaterial Brush="Blue"/>
                </GeometryModel3D.Material>
            </GeometryModel3D>
        </ModelVisual3D.Content>
    </ModelVisual3D>
</Viewport3D>

十、总结与展望

10.1 总结

本文全面介绍了 WPF 和 C# 的基础知识,从 C# 的数据类型、控制结构、方法和类,到 WPF 的 XAML 基础、布局管理、数据绑定、样式模板、动画多媒体、命令事件等方面进行了详细阐述。同时,还通过实践案例展示了如何使用 WPF 和 C# 进行应用开发,并介绍了 WPF 的一些高级特性。掌握这些知识和技能,开发者可以创建出功能强大、界面美观的 Windows 应用程序。

10.2 展望

随着技术的不断发展,WPF 和 C# 也在不断更新和完善。未来,WPF 可能会在性能优化、跨平台支持等方面取得更大的进展。同时,结合人工智能、大数据等技术,WPF 应用程序可以实现更加智能化和个性化的功能。开发者需要不断学习和探索,跟上技术的发展步伐,以开发出更加优秀的应用程序。

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

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

相关文章

好消息!软航文档控件(NTKO WebOffice)在Chrome 133版本上提示扩展已停用的解决方案

软航文档控件现有版本依赖Manifest V2扩展技术支持才能正常运行&#xff0c;然而这个扩展技术到2025年6月在Chrome高版本上就彻底不支持了&#xff0c;现在Chrome 133开始的版本已经开始弹出警告&#xff0c;必须手工开启扩展支持才能正常运行。那么如何解决这个技术难题呢&…

通过仿真确定抗积分饱和策略的最佳系数

通过仿真确定抗积分饱和策略的最佳系数&#xff08;如PID参数 ( K_p, K_i, K_d ) 以及抗饱和参数 ( K_{\text{back}} )、积分限幅值等&#xff09;是一个系统化的过程。以下是具体步骤和示例&#xff1a; — 1. 建立仿真模型 1.1 模型组成 被控对象&#xff1a;例如电机、温…

消息队列(Kafka及RocketMQ等对比联系)

目录 消息队列 一、为什么使用消息队列&#xff1f;消息队列有什么优点/缺点&#xff1f;介绍下Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优点缺点&#xff0c;如何取舍&#xff1f; 1.公司业务场景是什么&#xff0c;这个业务场景有什么挑战&#xff0c;如果不用MQ有什么麻…

GitHub开源的容器管理面板-Dpanel

dpanel Docker安装部署二进制部署 GitHub官网 一块轻量化docker可视化管理面板&#xff0c;由国人开发&#xff0c;个人觉得是比较好用的&#xff0c;功能都很齐全&#xff0c;并且可以通过修改源码&#xff0c;自定义前端样式等。 Docker安装部署 官网 部署环境&#xff1…

【HarmonyOS Next】三天撸一个BLE调试精灵

【HarmonyOS Next】三天撸一个BLE调试精灵 一、功能介绍 BLE调试精灵APP属于工具类APP&#xff0c;在用户使用的过程中&#xff0c;负责调试BLE设备从机端&#xff0c;比如蓝牙耳机、低功耗设备、带有BLE的空调等设备&#xff0c;可以在页面中清晰看到设备的厂商&#xff0c;…

java 批量下载doc\excle\pdf

指定图片集合 下载到指定文件夹 import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.Arrays; import java.util.List;public class OfficeFileDownloader {/*** 需要下载的Office文档URL列表*/private static final List<Strin…

软件性能效率测试工具有哪些?专业第三方软件检测机构推荐

在软件开发的新时代&#xff0c;软件性能效率测试已经成为每个企业不可或缺的一部分。无论是在竞争激烈的市场中&#xff0c;还是在追求卓越用户体验的过程中&#xff0c;都需要进行有效的性能测试。 一、软件性能效率测试的目标   1、响应时间&#xff1a;确保用户请求的响…

使用flask_restful快速构建接口

Flask-RESTful 是一个用于快速构建 RESTful API 的 Flask 扩展。它简化了创建、管理和文档化 REST API 的过程。利用 Flask-RESTful&#xff0c;你可以更容易地将你的 Flask 应用程序组织成 RESTful 原则的风格 安装包 pip install flask_restful 快速构建接口 from flask im…

centos 7 部署FTP 服务用shell 搭建脚本,使用时稍微修改自己所需需求

#!/bin/bash # 检查是否为 root 用户 if [ "$(id -u)" ! "0" ]; then echo "此脚本需要以 root 用户身份运行。" exit 1 fi # 安装 vsftpd yum install vsftpd -y # 备份原始配置文件 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd…

Hadoop集群搭建(hdfs、yarn)

Hadoop 是 Apache 软件基金会旗下的一个开源项目&#xff0c;是用于处理大数据的分布式系统基础架构&#xff0c;被广泛应用于大数据存储、处理和分析等场景。 一、核心组件 1、Hadoop 分布式文件系统&#xff08;HDFS&#xff09; 具有高容错性&#xff0c;能在低成本硬件上…

Keepalived 实现高可用方案

Keepalived简介 ‌Keepalived‌ 是一个基于 ‌VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;协议‌的高可用性解决方案&#xff0c;主要用于实现‌服务故障自动切换&#xff08;Failover&#xff09;和负载均衡‌。通过管理虚拟 IP&#xff08;VIP&#xf…

医学图像分割数据集肺分割数据labelme格式6299张2类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图像分辨率&#xff1a;1024x1024 图片数量(jpg文件个数)&#xff1a;6299 标注数量(json文件个数)&#xff1a;6299 标注类别数&#xff1a;2 标注类别名称:["leftl…

C语言复习笔记--函数递归

在学习了函数之后,函数递归是我们必然会接触到的课题,下面就让我们看下函数递归相关的知识. 递归是什么&#xff1f; 递归这个词看着就不那么好理解,那么什么是递归呢?递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数自己调用自己. 写⼀个史上最简单的C语⾔递归代码: …

husky的简介以及如果想要放飞自我的解决方案

husky 是一个 Git Hooks 管理工具&#xff0c;它的主要作用是 在 Git 提交&#xff08;commit&#xff09;、推送&#xff08;push&#xff09;等操作时执行自定义脚本&#xff0c;比如代码检查&#xff08;Lint&#xff09;、单元测试&#xff08;Test&#xff09;、格式化代码…

侯捷 C++ 课程学习笔记:现代 C++ 中的移动语义与完美转发深度解析

1. 前言&#xff1a;为什么我们需要移动语义&#xff1f; 在侯捷老师的《C11/14/17 新特性详解》课程中&#xff0c;移动语义&#xff08;Move Semantics&#xff09;被称作"C近十年来最重要的革新"。传统C中饱受诟病的深拷贝性能问题&#xff0c;在现代C中通过移动语…

23种设计模式-结构型模式-适配器

文章目录 简介场景问题解决方案建立中间转换层关键收益 总结 简介 使接口不兼容的类实现协同工作&#xff0c;通过引入中间层实现客户端接口和服务端接口的兼容。典型场景比如整合第三方类库或遗留系统时保持代码兼容。 场景 假设你正在开发一个股票监控程序。这个程序会下…

美亚科技业绩波动明显:现金流为负,四起未决诉讼涉金额1700万

《港湾商业观察》施子夫 近期&#xff0c;广东美亚旅游科技集团股份有限公司&#xff08;以下简称&#xff0c;美亚科技&#xff09;披露第二轮审核问询函的回复。从两轮问询函监管层提出的问题来看&#xff0c;有关美亚科技业绩增长的合理性、募投项目的必要性及合理性、经营…

PyTorch 深度学习实战(21):元强化学习与 MAML 算法

一、元强化学习原理 1. 元学习核心思想 元强化学习&#xff08;Meta-RL&#xff09;旨在让智能体快速适应新任务&#xff0c;其核心是通过任务分布学习共享知识。与传统强化学习的区别在于&#xff1a; 对比维度传统强化学习元强化学习目标解决单一任务快速适应任务分布中的…

23中设计模式-迭代器(Iterator)设计模式

迭代器设计模式 &#x1f6a9;什么是迭代器设计模式&#xff1f;&#x1f6a9;迭代器设计模式的特点&#x1f6a9;迭代器设计模式的结构&#x1f6a9;迭代器设计模式的优缺点&#x1f6a9;迭代器设计模式的Java实现&#x1f6a9;代码总结&#x1f6a9;总结 &#x1f6a9;什么是…

Word中公式自动标号带章节编号

&#xff08;1&#xff09;插入一行三列的表格&#xff0c;设置宽度分别为0.5&#xff0c;13.39和1.5&#xff0c;设置纵向居中&#xff0c;中间列居中对齐&#xff0c;最右侧列靠右对齐&#xff0c;设置段落如下 &#xff08;2&#xff09;插入域代码 【Word】利用域代码快速实…