前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WPF旋转板栈设计一例

WPF旋转板栈设计一例

作者头像
DotNet Whisperer
发布于 2025-04-13 07:05:59
发布于 2025-04-13 07:05:59
9200
代码可运行
举报
文章被收录于专栏:DotNet杂记DotNet杂记
运行总次数:0
代码可运行

效果图

项目中需要做一个机台的平面视图,点击其中一个料盒时,弹出该料盒的料管列表,用WPF示例做了一下,效果如下:

用户控件XAML

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <UserControl x:Class="WpfApp1.Views.BoardStackControl"
 2              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 5              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 6              xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
 7              xmlns:local="clr-namespace:WpfApp1.Views"
 8              xmlns:wpfapp1="clr-namespace:WpfApp1"
 9              d:DataContext="{d:DesignInstance Type=wpfapp1:MainViewModel}"
10              Width="224" Height="300"
11              mc:Ignorable="d" 
12              d:DesignHeight="300" d:DesignWidth="250">
13     <UserControl.DataContext>
14         <wpfapp1:MainViewModel />
15     </UserControl.DataContext>
16     <Grid>
17         <!--<ItemsControl ItemsSource="{Binding NestGroups}">
18             <ItemsControl.ItemsPanel>
19                 <ItemsPanelTemplate>
20                     <StackPanel Orientation="Horizontal"></StackPanel>
21                 </ItemsPanelTemplate>
22             </ItemsControl.ItemsPanel>
23             <ItemsControl.ItemTemplate>
24                 <DataTemplate>-->
25         <Border Margin="1">
26             <Grid Width="220" Height="220">
27                 <Ellipse Stroke="#dcdfe3" StrokeThickness="3"  Width="220" Height="220"/>
28                 <Ellipse Stroke="#dcdfe3" StrokeThickness="3"  Width="80" Height="80" HorizontalAlignment="Center" VerticalAlignment="Center"/>
29                 <ItemsControl ItemsSource="{Binding LeftTubes3}">
30                     <ItemsControl.ItemsPanel>
31                         <ItemsPanelTemplate>
32                             <Canvas/>
33                         </ItemsPanelTemplate>
34                     </ItemsControl.ItemsPanel>
35                     <ItemsControl.ItemContainerStyle>
36                         <Style TargetType="ContentPresenter">
37                             <Setter Property="Canvas.Left"  Value="{Binding X, Mode=OneWay}"/>
38                             <Setter Property="Canvas.Top"  Value="{Binding Y, Mode=OneWay}"/>
39                             <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
40                             <Setter Property="RenderTransform">
41                                 <Setter.Value>
42                                     <RotateTransform Angle="{Binding Angle}"/>
43                                 </Setter.Value>
44                             </Setter>
45                         </Style>
46                     </ItemsControl.ItemContainerStyle>
47                     <ItemsControl.ItemTemplate>
48                         <DataTemplate>
49                             <Grid>
50                                 <Border Width="35" Height="50" Tag="{Binding .}" x:Name="animatedBorder" MouseLeftButtonDown="Border_MouseLeftButtonDown" 
51                         CornerRadius="3"  Background="#FFE6E6E6" BorderBrush="Gray" BorderThickness="1">
52                                     <ItemsControl ItemsSource="{Binding Tubes}" Margin="2" IsHitTestVisible="False">
53                                         <ItemsControl.ItemsPanel>
54                                             <ItemsPanelTemplate>
55                                                 <UniformGrid Columns="{Binding Rows}" Rows="{Binding Cols}" IsHitTestVisible="False"/>
56                                             </ItemsPanelTemplate>
57                                         </ItemsControl.ItemsPanel>
58                                         <ItemsControl.ItemTemplate>
59                                             <DataTemplate>
60                                                 <Ellipse Width="{Binding Width}" Height="{Binding Height}" Fill="#FF4F81BD"  Margin="{Binding Margin}" Stroke="Black" StrokeThickness="0.5" IsHitTestVisible="False"/>
61                                             </DataTemplate>
62                                         </ItemsControl.ItemTemplate>
63                                     </ItemsControl>
64                                     <Border.Triggers>
65                                         <EventTrigger RoutedEvent="MouseLeftButtonUp">
66                                             <BeginStoryboard>
67                                                 <Storyboard>
68                                                     <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.5" Duration="0:0:0.1" AutoReverse="True"/>
69                                                 </Storyboard>
70                                             </BeginStoryboard>
71                                         </EventTrigger>
72                                     </Border.Triggers>
73                                 </Border>
74                                 <Border Width="20" Height="20" CornerRadius="10"  Background="#FF4F81BD" BorderBrush="White" BorderThickness="1" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,-10,0,0">
75                                     <TextBlock Text="{Binding Index}"   Foreground="White" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
76                                 </Border>
77                             </Grid>
78                         </DataTemplate>
79                     </ItemsControl.ItemTemplate>
80                 </ItemsControl>
81             </Grid>
82         </Border>
83         <!--</DataTemplate>
84             </ItemsControl.ItemTemplate>
85         </ItemsControl>-->
86 
87     </Grid>
88 </UserControl>
89 
90     

用户控件XMAL.CS

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 using CommunityToolkit.Mvvm.Messaging;
 2 using Microsoft.Extensions.Logging;
 3 using System.Collections.ObjectModel;
 4 using System.Diagnostics;
 5 using System.Windows;
 6 using System.Windows.Controls;
 7 using System.Windows.Input;
 8 using System.Windows.Media;
 9 using WpfApp1.Entities;
10 
11 namespace WpfApp1.Views;
12 
13 public partial class BoardStackControl : UserControl
14 {
15     public BoardStackControl()
16     {
17         InitializeComponent();
18 
19     }
20 
21     public static readonly RoutedEvent BorderClickedEvent =
22         EventManager.RegisterRoutedEvent(
23             "BorderClicked",
24             RoutingStrategy.Bubble,
25             typeof(RoutedEventHandler),
26             typeof(BoardStackControl)
27         );
28 
29     public event RoutedEventHandler BorderClicked
30     {
31         add => AddHandler(BorderClickedEvent, value);
32         remove => RemoveHandler(BorderClickedEvent, value);
33     }
34 
35     private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
36     {
37         if (sender is Border border && border.DataContext is BoxPosition boxPosition)
38         {
39             // 触发路由事件,并携带索引
40             var args = new RoutedEventArgs(BorderClickedEvent, boxPosition.Index);
41             RaiseEvent(args);
42             e.Handled = true;
43         }
44     }
45 
46 }

主窗口XAML

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <Window x:Class="WpfApp1.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 5         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 6         xmlns:local="clr-namespace:WpfApp1"
 7         xmlns:view="clr-namespace:WpfApp1.Views"
 8         mc:Ignorable="d"
 9         Title="MainWindow" Height="450" Width="800">
10     <Window.DataContext>
11         <local:MainViewModel />
12     </Window.DataContext>
13     <Grid>
14         <Border BorderBrush="Gray" BorderThickness="1">
15             <Grid>
16                 <Grid.RowDefinitions>
17                     <RowDefinition Height="100"/>
18                     <RowDefinition Height="300"/>
19                 </Grid.RowDefinitions>
20                 <Grid.ColumnDefinitions>
21                     <ColumnDefinition Width="*"></ColumnDefinition>
22                     <ColumnDefinition Width="*"></ColumnDefinition>
23                     <ColumnDefinition Width="*"></ColumnDefinition>
24                 </Grid.ColumnDefinitions>
25 
26                 <Border Grid.ColumnSpan="3" Grid.Row="0"  BorderBrush="LightGray" BorderThickness="0,0,0,1">
27                     <Grid>
28                         <Rectangle Fill="#FFD3D3D3" Height="60" VerticalAlignment="Center"/>
29 
30                         <Path Data="M117 91q-6-7 1-12l2-26q-3-1-2-7L85 34q-3 4-8 1L54 48q0 4-5 5L48 54 38 61l-1-1 10-7-3-3-10 6-1-1 10-6 1-1L44 47q1-4 5-4L75 28c2-4 6-5 10-2l40 15q9 0 6 9l2 29q7 5 0 13l14 8v7H101v-7Z" 
31                           Fill="#FF4F81BD" Stroke="Black" StrokeThickness="1"
32                           HorizontalAlignment="Center" VerticalAlignment="Center"
33                           Margin="-20,0,0,0" />
34                     </Grid>
35                 </Border>
36 
37                 <view:BoardStackControl Grid.Row="1" Grid.Column="0" BorderClicked="Rack1Control_BorderClicked" />
38                 <view:BoardStackControl Grid.Row="1" Grid.Column="1" BorderClicked="Rack2Control_BorderClicked" />
39                 <view:BoardStackControl Grid.Row="1" Grid.Column="2" BorderClicked="Rack3Control_BorderClicked" />
40             </Grid>
41         </Border>
42     </Grid>
43 </Window>

主窗口XAML.CS

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 using System.Diagnostics;
 2 using System.Text;
 3 using System.Windows;
 4 using System.Windows.Controls;
 5 using System.Windows.Data;
 6 using System.Windows.Documents;
 7 using System.Windows.Input;
 8 using System.Windows.Media;
 9 using System.Windows.Media.Imaging;
10 using System.Windows.Navigation;
11 using System.Windows.Shapes;
12 using WpfApp1.Entities;
13 using WpfApp1.Views;
14 
15 namespace WpfApp1
16 {
17     /// <summary>
18     /// Interaction logic for MainWindow.xaml
19     /// </summary>
20     public partial class MainWindow : Window
21     {
22         public MainWindow()
23         {
24             InitializeComponent();
25         }
26 
27         private void Rack1Control_BorderClicked(object sender, RoutedEventArgs e)
28         {
29             if (e.OriginalSource is int index)
30             {
31                 MessageBox.Show($"点击了第 1 个板栈的第 {index} 个 Border");
32                 ExecuteMainWindowMethod(index);
33             }
34         }
35         private void Rack2Control_BorderClicked(object sender, RoutedEventArgs e)
36         {
37             if (e.OriginalSource is int index)
38             {
39                 MessageBox.Show($"点击了第 2 个板栈的第 {index} 个 Border");
40                 ExecuteMainWindowMethod(index);
41             }
42         }
43         private void Rack3Control_BorderClicked(object sender, RoutedEventArgs e)
44         {
45             if (e.OriginalSource is int index)
46             {
47                 MessageBox.Show($"点击了第 3 个板栈的第 {index} 个 Border");
48                 ExecuteMainWindowMethod(index);
49             }
50         }
51 
52         private void ExecuteMainWindowMethod(int index)
53         {
54             //// 这里编写 MainWindow 的具体逻辑
55             //// 例如更新 UI 或处理业务逻辑
56             //var vm = (MainViewModel)this.DataContext;
57             //vm.RackClickedCommand.Execute($"2_{deviceCode}_{rackIndex}");
58         }
59     }
60 }

主窗口ViewModel

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  1 using CommunityToolkit.Mvvm.ComponentModel;
  2 using CommunityToolkit.Mvvm.Input;
  3 using CommunityToolkit.Mvvm.Messaging;
  4 using System;
  5 using System.Collections.Generic;
  6 using System.ComponentModel;
  7 using System.Diagnostics;
  8 using System.Runtime.CompilerServices;
  9 using System.Windows.Input;
 10 using WpfApp1.Entities;
 11 using WpfApp1.Views;
 12 
 13 namespace WpfApp1
 14 {
 15     public partial class MainViewModel
 16     {
 17 
 18         public MainViewModel()
 19         {
 20 
 21             LeftTubes3 = CreateCircularTubes(12, 18, 110, 50);
 22 
 23             //IsActive = true;
 24         }
 25 
 26         #region 左侧板栈UI
 27 
 28         public List<BoxPosition> LeftTubes3 { get; set; } = [];
 29 
 30         private static List<BoxPosition> CreateCircularTubes(int count, int tubs, double outerRadius, double innerRadius)
 31         {
 32             var positions = new List<BoxPosition>();
 33             double centerX = outerRadius;
 34             double centerY = outerRadius;
 35 
 36             for (int i = 0; i < count; i++)
 37             {
 38                 // 计算角度 (360度均匀分布)
 39                 double angleDeg = 360.0 * i / count;
 40                 double angleRad = angleDeg * Math.PI / 180.0;
 41 
 42                 // 计算位置 (在内外半径之间)
 43                 double radius = (outerRadius + innerRadius) / 2;
 44                 double x = centerX + radius * Math.Cos(angleRad) - 17; // 25是料盒宽度的一半
 45                 double y = centerY + radius * Math.Sin(angleRad) - 25; // 35是料盒高度的一半
 46 
 47                 // 行数和列数
 48                 var rows = 2;
 49                 var cols = 3;
 50                 var margin = 2;
 51                 var width = 10;
 52                 var height = 10;
 53                 switch (tubs)
 54                 {
 55                     case 3:
 56                         rows = 1;
 57                         cols = 3;
 58                         margin = 2;
 59                         width = 10;
 60                         height = 10;
 61                         break;
 62                     //case 6:
 63                     //    rows = 2;
 64                     //    cols = 3;
 65                     //    break;
 66                     case 12:
 67                         rows = 3;
 68                         cols = 4;
 69                         margin = 1;
 70                         width = 5;
 71                         height = 5;
 72                         break;
 73                     case 18:
 74                         rows = 3;
 75                         cols = 6;
 76                         margin = 1;
 77                         width = 4;
 78                         height = 4;
 79                         break;
 80                     case 96:
 81                         rows = 8;
 82                         cols = 12;
 83                         margin = 0;
 84                         width = 1;
 85                         height = 1;
 86                         break;
 87                 }
 88 
 89                 // 创建6个料管
 90                 var tubes = new List<Tube>();
 91                 for (int j = 0; j < tubs; j++)
 92                 {
 93                     tubes.Add(new Tube
 94                     {
 95                         Margin = margin,
 96                         Width = width,
 97                         Height = height,
 98                     });
 99                 }
100 
101                 positions.Add(new BoxPosition
102                 {
103                     Index = i + 1,
104                     X = x,
105                     Y = y,
106                     Rows = rows,
107                     Cols = cols,
108                     Angle = angleDeg + 90, // 旋转角度等于位置角度
109                     Tubes = tubes
110                 });
111             }
112 
113             return positions;
114         }
115 
116 
117         #endregion
118 
119     }
120 }

Entities

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace WpfApp1.Entities
 8 {
 9     public class NestGroup
10     {
11         public List<BoxPosition> Nests { get; set; } = [];
12     }
13     public class BoxPosition
14     {
15         public int Index { get; set; }
16         public double X { get; set; }
17         public double Y { get; set; }
18         public double Angle { get; set; }
19         public int Rows { get; set; } = 2;
20         public int Cols { get; set; } = 3;
21         public List<Tube> Tubes { get; set; } = [];
22     }
23 
24     public class Tube
25     {
26         public int Margin { get; set; } = 2;
27         public int Width { get; set; } = 10;
28         public int Height { get; set; } = 10;
29     }
30 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
温故而知新:c#中的特性(attribute)
特性(Attribute)是微软在.Net中自创的一种新技术,对于很多初学者来讲,特性一直是一块难啃的骨头。 既然弄不懂,那我们就暂时绕过它吧,回想一下我们在写代码时通常都要求写注释,为了是让别人或自己以后能看得懂,但是这个注释是写给“人”看的,突发奇想一下:我们能不能写出一种注释,给c#编译器看,比如我们在某些代码上打个标记,让编译器看到这些标记后,做出不同的反应? 其实...这就是特性,比如我们定义一个常规的类 public class Product { public string Name {
菩提树下的杨过
2018/01/23
5410
[C#1] 12-特性
1.特性简介 特性仅仅是为目标元素提供关联的附加信息的一种方式,编译器的工作只是将这些附加信息放到托管模块的元数据中, 大多特性对于编译器来说没有任何特殊的意义,编译器只是检测源代码中的定制特性,然后产生相应的元数据。 FCL中已经带来了很多的预定义特性[System.ParamArrayAttribute,SerializableAtribute...]。 在C#中,将特性放在紧挨着目标元素前的一个方括号[]中,就表示该元素应用该特性了。 CLR允许将特性应用于任何可以在一个文件的元数据中表示的元素上。
blackheart
2018/01/19
7860
C# Attribute
C#中的Attribute(特性)是一种元数据,在C#中的作用是为元数据添加内容。元数据是关于程序中各种元素的信息,如类、方法、属性等。Attribute允许开发者在这些元素上附加额外的信息,以提供更多的上下文或指导编译器、工具或运行时环境的行为。
JusterZhu
2023/09/25
3170
C# Attribute
C#反射与特性(七):自定义特性以及应用
【微信平台,此文仅授权《NCC 开源社区》订阅号发布】 本章的内容,主要是对属性和字段进行赋值和读值、自定义特性、将特性应用到实际场景。
痴者工良
2021/04/26
1.4K0
浅谈.Net反射 9
假设我们在实现一个方法A,但是因为某种原因,这个方法A设计的不够好,我们需要重新设计一个方法B来代替方法A,因为很多客户程序中已经在使用旧版本的方法A了,如果简单地删除掉旧的方法A,使用老版本方法A的客户程序将无法工作,因此必须考虑兼容性。这个时候,我们应该同时保留A和B两个方法。那么我们会希望告知客户程序现在有一个全新的方法B可供使用,但此时客户程序并不知道已经存在一个新的方法B,那么又该如何做呢?
小蜜蜂
2019/07/30
5020
C#中的方括号[](特性、属性)
首先要说的是,可能一些刚接触C#的朋友常常容易把属性(Property)跟特性(Attribute)弄混淆,其实这是两种不同的东西。属性就是面向对象思想里所说的封装在类里面的数据字段,其形式为:
vv彭
2020/12/28
8.1K0
C#中的方括号[](特性、属性)
C#-特性、反射
给程序添加的声明性标签 .Net 提供了两种特性:预定义特性 自定义特性 预定义特性 : 三种 1.条件方法 : 只有在预编译指令和conditional的条件一样时,才会执行方法
祝你万事顺利
2019/05/28
3340
C#反射
反射 ----   反射是一种机制,通过这种机制可以知道一个未知类型的类型信息。比如,有一个对象a,这个对象不是我们定义的,但我们想知道这个对象的类型信息,想知道这个对象有哪些方法或者属性什么的。甚至我们想进一步调用这个对象的方法。关键是现在我们只知道它是一个对象,不知道它的类型,自然不会知道它有哪些方法等信息.这时我们该怎么办?反射机制就是解决这么一个问题的.通过反射机制我们可以知道未知类型对象的类型信息。   反射(Reflection) 对象用于在运行时获取类型信息。该类位于 System.Refle
拾点阳光
2018/05/10
1K0
.Net中的反射(反射特性) - Part.3
可能很多人还不了解特性,所以我们先了解一下什么是特性。想想看如果有一个消息系统,它存在这样一个方法,用来将一则短消息发送给某人:
张子阳
2018/09/30
5000
.Net中的反射(反射特性) - Part.3
开心档之C# 特性(Attribute)
**特性(Attribute)**是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。
iOS Magician
2023/04/23
4560
C#的自定义特性
在C#中,特性(Attribute)是一种强大的工具,它允许开发者为代码元素(如类、方法、属性等)添加元数据。这些元数据可以在运行时被读取,从而影响程序的行为或提供关于程序的额外信息。本文将深入探讨自定义特性的定义、应用和一些高级使用技巧。
Michel_Rolle
2024/10/09
2.9K0
C#之反射、元数据详解
  在本节中主要讲述自定义特性、反射。自定义特性允许把自定义元数据与程序元素关联起来。这些元数据是在编译过程中创建的,并嵌入程序集中。反射是一个普通的术语,它描述了在运行过程中检查和处理程序元素的功能。例如,反射运行完成以下任务:
小世界的野孩子
2019/09/11
1.5K0
[C#]使用反射访问特性
你可以定义自定义特性并将其放入源代码中这一事实,在没有检索该信息并对其进行操作的方法的情况下将没有任何价值。
科控物联
2022/03/29
6140
[C#]使用反射访问特性
【深入浅出C#】章节 9: C#高级主题:反射和动态编程
反射和动态编程为开发人员提供了一组强大的工具,可以应对多样化的编程需求,提高代码的灵活性和可维护性。然而,应谨慎使用它们,以确保代码的安全性和性能。
喵叔
2023/09/03
1.2K0
.NET基础拾遗(4)委托、事件、反射与特性
  委托这个概念对C++程序员来说并不陌生,因为它和C++中的函数指针非常类似,很多码农也喜欢称委托为安全的函数指针。无论这一说法是否正确,委托的的确确实现了和函数指针类似的功能,那就是提供了程序回调指定方法的机制。
Edison Zhou
2018/08/20
1K0
.NET基础拾遗(4)委托、事件、反射与特性
C#面试题及答案_c++面试题库
参考链接:https://www.cnblogs.com/bakuhert/articles/5878086.html
全栈程序员站长
2022/09/27
6040
C#面试题及答案_c++面试题库
C#的内置特性
在C#编程语言中,特性(Attributes)是一种强大的工具,用于为代码元素(如类、方法、属性等)提供元数据。这些元数据可以在编译时被编译器使用,也可以在运行时通过反射(Reflection)被访问。本文将详细介绍C#中的内置特性,包括它们的工作原理、使用场景和一些高级技巧。
Michel_Rolle
2024/10/09
2.9K0
《CLR via C#》笔记:第3部分 基本类型(3)
本博客所总结书籍为《CLR via C#(第4版)》清华大学出版社,2021年11月第11次印刷(如果是旧版书籍或者pdf可能会出现书页对不上的情况) 你可以理解为本博客为该书的精简子集,给正在学习中的人提供一个“glance”,以及对于部分专业术语或知识点给出解释/博客链接。 【本博客有如下定义“Px x”,第一个代表书中的页数,第二个代表大致内容从本页第几段开始。(如果有last+x代表倒数第几段,last代表最后一段)】 电子书可以在博客首页的文档-资源归档中找到,或者点击:传送门自行查找。如有能力
[Sugar]
2022/09/21
9830
Attribute特性
特性,是用来给代码添加额外信息的一种手段,我们通常是将特性标记到方法,类或者属性上,在使用的这些结构的时候,通过反射(reflection)这一非常高级的技术,获取它们通过特性标记的信息,从而进行某些特殊的处理。
宿春磊Charles
2022/03/29
4290
C#反射的特性
如果您现在对反射还不太了解的话,那么可以先看看这篇博文,来粗略的了解一下反射吧。什么是反射
aehyok
2018/09/11
9150
C#反射的特性
相关推荐
温故而知新:c#中的特性(attribute)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验