- 博客(196)
- 资源 (11)
- 收藏
- 关注
原创 使用WinForm结合Markdig库竟能轻松开发出Markdown 编辑器
在当今数字化的时代,Markdown 已经成为了撰写文档、博客文章、技术笔记等的热门选择,因其简洁的语法和强大的表现力备受青睐。今天,我将为大家分享一个基于 WinForm 和 .NET 开发的 Markdown 编辑器,它使用了 Markdig 库,具备实时预览、文件操作以及导出功能,并且采用简洁的分栏设计,让用户可以即时查看 Markdown 渲染效果。本项目旨在开发一个简单易用的 Markdown 编辑器,通过 WinForm 界面提供直观的操作体验。
2025-03-21 17:03:34
986
原创 C#基础之回调机制详解,让代码动起来的关键技巧
大家好,欢迎关注dotnet研习社,今天我们聊聊 C# 中一个很基础但又非常实用的概念 ——回调机制。相信很多小伙伴刚入门编程的时候,听到“回调”这个词会感觉有点抽象,好像是个挺高级的玩意儿。其实,回调的本质非常简单,它就是把一个方法当作参数传给另一个方法,并在合适的时机调用它。直白地说,回调就是“反过来调用”。通常我们写方法时,都是主动去调用别人写的方法。而回调则是,我们把自己的一段方法交给别人,等到适当的时候,对方再“反过来”调用我们的方法。这个机制在异步编程事件驱动模块解耦等场景中极其有用。
2025-03-21 17:02:14
402
原创 探索.NET 10 的新特性,开发效率再升级!
最近,.NET 10 发布啦,作为长期支持(LTS)版本,接下来的 3 年里它会给开发者们稳稳的幸福。今天咱就来唠唠它都带来了哪些超实用的新特性。可在指定链接下载。
2025-03-06 23:33:56
800
原创 验证测试 .NET 10 预览版的 Windows 窗体中的剪贴板新增功能
在 .NET 10 中,Windows Forms 对剪贴板功能进行了更新,引入了新的 API 以提高类型安全性和避免使用带来的安全风险。上述简单的测试了下剪切板的功能,后面我们在尝试其他的内容,敬请期待~欢迎进群交流学习~
2025-03-06 23:33:19
1000
原创 让架构为业务发声:深度解读尖叫架构实践之道
你是否曾遭遇过这般情形:打开新项目的代码仓库,迎面而来的是controllers、services、repositories等标准目录,在层层框架封装下,你不得不像考古学家般挖掘代码,才能勉强拼凑出系统的业务全貌。这种技术细节喧宾夺主的现象,正是Robert C. Martin所批判的"低声细语的架构"(Whispering Architecture)。
2025-02-24 23:48:40
1060
原创 初学者也能快速掌握的方式,.net core项目集成DeepSeek
想要在自己的API项目中集成DeepSeek大语言模型,我们该如何操作?直接使用HttpClient调用 DeepSeek API:通过手动构建 HTTP 请求,直接与 DeepSeek 的 RESTful API 进行交互。使用第三方 SDK(如:利用社区提供的 SDK,简化与 DeepSeek API 的交互过程。以下将详细介绍这两种方式的实现步骤,并提供完整的示例代码。以上两种方式各有优劣。直接使用HttpClient可以完全掌控 HTTP 请求的细节,适合需要高度自定义的场景;而使用。
2025-02-24 07:00:00
1733
原创 WinForm开发核心基础之事件驱动设计
传统过程式程序:按顺序执行代码逻辑,通过函数调用控制流程。事件驱动程序:由用户操作(如点击、输入)或系统消息(如定时器、网络响应)触发事件,程序被动响应这些事件。// 1. 定义委托和事件// 2. 触发事件的方法// 3. 模拟温度变化// 自定义事件参数类eConsole . WriteLine($"当前温度: {掌握事件驱动设计是成为优秀WinForm开发者的必经之路。通过合理利用内置事件和自定义事件机制,可以构建出高度灵活、响应迅速且易于维护的应用程序。
2025-02-21 04:00:00
706
原创 事件聚合器(Event Aggregator)管理跨组件通信
事件聚合器作为一种重要的设计模式,在复杂场景下的跨组件通信中发挥了巨大的作用。它不仅使得各个组件之间的交互更加灵活和松耦合,还提高了应用的可扩展性和可维护性。然而,在实际应用中,如何有效管理事件流、处理性能和调试问题依然是我们需要深入思考的方向。通过对事件聚合器的合理使用,可以使得复杂的事件驱动架构更加简洁、高效,进而实现高质量的软件系统。
2025-02-21 04:00:00
769
原创 异步事件驱动设计:提升并发和响应性
异步事件驱动设计是一种有效的架构模式,尤其适用于高并发、响应性要求高的系统。在复杂的分布式应用中,结合异步编程和事件驱动架构,可以显著提高系统的性能和扩展性。尽管如此,实施异步事件驱动设计时也需要关注状态管理、错误处理和资源优化等问题。通过合理的设计和调度,异步事件驱动架构将成为现代应用程序中不可或缺的一部分。
2025-02-21 04:00:00
607
原创 使用OllamaSharp库,你的桌面程序也能对接DeepSeek大模型
随着人工智能技术的飞速发展,大语言模型(LLM)在自然语言处理领域展现出了强大的能力。为了方便.NET开发者使用,OllamaSharp应运而生,它是一个与Ollama API交互的C#库,能够轻松将AI模型集成到.NET应用程序中。OllamaSharp作为一款与Ollama API交互的C#库,为.NET开发者提供了便捷的AI模型集成方案。通过OllamaSharp,开发者可以轻松实现聊天、嵌入、管理模型等功能,将Ollama的强大能力融入到自己的应用程序中,为用户带来更加智能化的体验。
2025-02-14 10:05:20
824
1
原创 C#开发基础之如何在不改变原有类代码的情况下扩展一个类的方法
在C#开发中,我们经常会遇到需要扩展一个已有类的功能,但又不能直接修改该类的情况。这可能是因为该类是第三方库的一部分,或者是因为修改原有代码可能会引入不必要的风险。扩展方法(Extension Methods)。扩展方法允许你“添加”方法到现有的类型中,而无需修改原始类型的代码或创建新的派生类型。这些方法在语法上看起来就像是原始类型的一部分,但实际上它们是在外部定义的静态方法。创建一个静态类:扩展方法必须定义在一个静态类中。定义一个静态方法:扩展方法本身必须是一个静态方法。使用this关键字。
2025-02-12 17:27:14
1074
原创 C++开发基础之使用FFTW实现高效的信号滤波(含低通、高通与带通滤波器示例)
在信号处理中,滤波器是不可或缺的工具。通过过滤掉特定频率的信号成分,我们可以获得更清晰、更有用的数据。在本文中,我们将展示如何在Windows平台下,使用Visual Studio(VS)集成开发环境(IDE),借助FFTW库实现高效的信号滤波。我们将涵盖低通、高通和带通滤波器的实现。在这篇文章中,我们展示了如何在Windows平台下,使用Visual Studio和FFTW库实现低通、高通和带通滤波器。通过FFT和IFFT转换,我们能够有效地从时域信号中提取或抑制特定频率的成分,从而达到滤波的目的。
2025-02-12 07:00:00
1095
原创 深入浅出:SQL Server 中的 PIVOT 与 UNPIVOT 用法详解
PIVOT通过聚合实现行转列,适合制作汇总视图UNPIVOT通过逆向操作恢复数据结构,适合数据清洗二者配合使用可完成复杂数据转换需求。
2025-02-08 12:01:28
817
原创 使用Obfuscar对.NET项目进行混淆保护的实践
在 .NET 开发中,保护代码不被轻易反编译和逆向工程是一个重要的任务。Obfuscar 是一个开源的 .NET 混淆工具,能够通过重命名方法、类、字段以及编码字符串等方式,有效保护我们的代码。本文将详细介绍如何使用 Obfuscar 对 .NET 项目进行混淆保护,适合初学者一步步操作。方法重命名:将方法名、类名、字段名等重命名为无意义的字符。字符串编码:对字符串进行编码,防止直接查看明文。控制流混淆:改变代码的控制流,增加反编译的难度。Obfuscar 简单易用,适合小型项目或开源项目使用。
2025-01-21 07:00:00
1709
原创 模块化架构与微服务架构,哪种更适合桌面软件开发?
在现代软件开发中,架构设计扮演着至关重要的角色。两种常见的架构设计方法是模块化架构与微服务架构。它们各自有独特的优势和适用场景,尤其在C#桌面软件开发领域,模块化架构往往更加具有实践性。本文将对这两种架构进行对比,并分析在C#桌面软件开发中为何模块化架构更为实用。模块化架构是指将软件系统划分为多个相对独立的模块,每个模块负责系统中的一部分功能。模块之间通过清晰的接口进行通信,模块的实现尽可能不依赖于其他模块。模块化设计的核心目标是提高系统的可维护性、可扩展性和可复用性。
2025-01-19 00:19:05
1647
1
原创 详解ASP.NET Core MVC中的Result类型
在ASP.NET Core MVC中,控制器(Controller)负责处理请求并返回相应的结果。这些结果可以是HTML视图、JSON数据、文件、重定向等。ASP.NET Core MVC提供了多种Result Types来满足不同的需求。本文将详细介绍常见的Result Types,包括ViewResultJsonResultFileResult和。ASP.NET Core MVC提供了丰富的Result Types来满足不同的需求。
2025-01-17 17:49:03
718
原创 你相信吗?还有人在使用两层架构进行开发
在当今快速发展的科技世界中,架构的选择对开发者和技术团队来说至关重要。随着互联网应用的复杂性不断增加,微服务架构和分布式系统等现代架构被广泛采用,追求更高的可扩展性和灵活性似乎成为了主流趋势。然而,你是否能相信,在这样的背景下,仍然有人在使用“两层架构”进行开发?在探讨为什么两层架构依然存在之前,我们首先需要明确什么是两层架构。客户端(前端):负责与用户交互,展示界面并接收用户输入。数据库(后端):负责存储和管理数据,直接响应客户端的请求。
2025-01-17 15:57:23
623
原创 Winforms开发基础之非主线程操作UI控件的误区
想象一下,你正在开发一个桌面应用程序,用户点击按钮后需要执行一个耗时操作。为了避免界面卡顿,你决定使用后台线程来处理任务。然而,当你在后台线程中尝试更新UI控件时,程序突然崩溃了。这是为什么呢?在.Net桌面软件开发中,多线程的使用非常普遍,尤其是在处理耗时任务时,后台线程(或工作线程)通常被用来避免主线程的阻塞,从而提升用户界面的响应性。然而,很多初学者可能会在多线程操作中忽视一个至关重要的规则——UI控件的创建和更新必须在UI线程中进行。
2025-01-13 17:00:42
1062
原创 C#开发基础之缓存优化技巧:哪些数据该存,哪些不该存?
在软件开发中,性能优化是我们必须考虑的重要方面。缓存作为提升系统性能的一种有效技术手段,尤其在处理高并发请求、减少数据库访问、加速响应速度等方面表现出色。然而,缓存的使用并非万无一失,合理的缓存设计能够有效提高系统性能,反之则可能带来内存浪费、数据不一致等问题。本文将深入探讨在C#开发中,如何设计缓存系统,介绍什么数据应该存储在缓存中,什么数据不适合存储在缓存中,并通过代码示例和实际应用场景帮助我们更好地理解缓存的设计与实现。缓存是提升系统性能的有效手段,但缓存设计需要小心谨慎。
2025-01-13 07:00:00
805
原创 C#开发基础之你会遇到的这些文件类型,你都知道了吗?
在 C# 开发过程中,我们不仅要处理代码,还会频繁接触到各种不同类型的文件。这些文件在开发、调试、构建、发布以及配置方面起着至关重要的作用。本文将为你介绍在 C# 开发中常见的文件类型,帮助我们更好地理解它们的用途。从开发源代码到配置文件,再到日志、证书和数据库文件,C# 开发过程中会涉及到各种类型的文件。每种文件都有其特定的用途和重要性,它们有助于代码的组织、调试、部署、版本控制、自动化等方面的工作。掌握这些文件类型的基本知识,能帮助我们更好地理解整个开发流程,提升开发效率。
2025-01-10 07:00:00
1221
原创 C#开发基础之高性能后台工作服务封装BackgroundWorker<T>实现分析
是一个灵活且高效的定时任务框架,通过提供高精度和普通两种模式,能够满足不同场景的定时需求。实现既考虑了性能,又保持了代码的简洁性和可维护性。在实际应用中,可以根据具体需求选择合适的模式,实现最优的效果。
2025-01-09 07:00:00
900
原创 ASP.NET Core 中服务生命周期详解:Scoped、Transient 和 Singleton 的业务场景分析
在 ASP.NET Core 中,服务的生命周期直接影响应用的性能和行为。通过依赖注入容器 (ScopedTransient和Singleton。本文将详细阐述这些生命周期的区别及其在实际业务中的应用场景。Scoped: 每次 HTTP 请求创建一个实例,在请求范围内共享。Transient: 每次请求服务时都会创建一个新的实例。Singleton: 应用程序启动时创建一个实例,整个应用生命周期内共享。Scoped:适用于在请求内共享服务的场景。Transient:适用于短生命周期的无状态服务。
2025-01-07 00:07:44
1113
原创 Winforms开发基础之使用SuspendLayout和ResumeLayout提高界面布局性能
在开发 Windows Forms 应用程序时,尤其是在处理大量控件的动态调整时,布局性能可能成为一个重要的问题。当我们频繁对控件进行调整(如修改位置、大小、可见性等)时,控件的布局会自动重新计算并重绘,这会消耗不必要的系统资源,导致界面响应变慢。为了优化这类性能问题,.NET提供了和两个方法,这两个方法能够帮助我们在控件的布局调整过程中避免不必要的重新布局,从而提高程序的性能。和是在进行批量控件更新时非常有用的性能优化工具。它们能够有效地避免在频繁修改控件属性时引发多次布局计算,从而提高应用程序的性能。
2024-12-31 07:00:00
1459
原创 从使用Node.js编写一个API访问SQLite数据库的案例来体会与Asp.net Core WebApi开发的差异
在前面的文章中,介绍过如何使用 Minimal API 和 ASP.NET Core Web API 来搭建 RESTful API。这些框架都提供了高效、易用的方式来构建现代化的 Web 服务。随着开发技术的不断发展,各种技术栈也在不断涌现,Node.js 作为一种轻量级的、基于事件驱动的服务器端 JavaScript 环境,已经被广泛应用于后端开发中。最近,我尝试了一下使用 Node.js 来搭建一个 API 示例,目的是深入了解不同开发框架之间的差异。
2024-12-30 07:00:00
1639
原创 dotnet开发基础之Minimal API和Web REST API的区别
在现代 Web 开发中,API(应用程序编程接口)已成为连接不同服务和应用程序的重要桥梁。随着微服务架构的普及以及轻量级应用的需求,开发者通常面临着如何选择合适的 API 设计方式的问题。在众多 API 架构中,和是最常见的两种。本文将详细介绍和的定义、特点以及它们之间的区别,帮助我们更好地理解和选择适合的架构。是基于原则的 Web 服务接口。REST 是一种架构风格,而不是一种标准或协议,它利用 HTTP 协议来实现客户端与服务器之间的通信。
2024-12-28 07:00:00
939
原创 快速了解开源日志框架log4net:灵活记录应用程序日志信息的利器
log4net 是一个广泛应用的、开源的日志框架,它提供了一种灵活的机制来记录应用程序的日志信息。log4net 使用 Apache Software Foundation 的 Apache License 2.0 开源协议,可以免费使用和修改。使用 log4net,可以将应用程序中的不同事件记录到不同的日志等级中。例如,可以将某些调试信息写入调试日志,将错误信息写入错误日志等。通过这些不同级别的日志,可以更方便地跟踪和管理应用程序的运行情况。
2024-12-27 00:09:59
879
原创 WinForms开发基础之文件操作基础
在WinForms开发中,文件操作是非常常见且重要的功能。无论是读取文件、保存数据、还是处理配置文件,都需要依赖文件操作的API。通过文件操作,程序能够与磁盘进行交互,实现数据的持久化存储。Windows提供了丰富的文件操作API,特别是System.IO命名空间中的类,帮助我们高效地处理文件和目录。本文将详细介绍在WinForms中如何进行文件操作,并深入讲解常用的相关API。在WinForms开发中,文件操作是一个基础且重要的功能。使用System.IO。
2024-12-26 07:00:00
614
原创 AI不会替换懂软件设计的人,会替换只会编码的人
随着人工智能(AI)技术的飞速发展,越来越多的行业开始探索如何将AI应用于实际工作中,尤其是在软件开发领域。AI的自动化能力在提升开发效率、降低成本、减少重复性劳动等方面展现出巨大的潜力。然而,随着AI技术的逐步成熟,许多人开始担心,AI是否会取代软件开发者,甚至替代那些具有多年经验的资深开发者?在我看来,AI并不会替换那些懂得软件设计的人,反而会替换那些仅仅会编码的人。接下来,我将从几个角度探讨这一观点。
2024-12-25 07:00:00
860
原创 WinForms开发基础之UI线程与多线程编程
在 WinForms 开发中,处理用户界面 (UI) 线程与后台线程的交互是一个常见且非常重要的技能。理解线程的工作方式,并掌握如何避免阻塞 UI 线程,对于构建响应快速、稳定的应用程序至关重要。本文将深入探讨 UI 线程与多线程编程在 WinForms 中的应用。为了避免 UI 线程阻塞,我们通常需要使用多个线程来并发处理任务。Thread类:可以通过创建Thread对象来手动管理线程。类:为执行后台任务提供了一个简化的接口。Task类(推荐):基于异步编程模型,提供了更现代、灵活的线程管理方式。
2024-12-25 07:00:00
2170
原创 Winform开发基础之熟悉Win32 API函数
在 WinForms 应用程序中,开发者可以通过调用 Win32 API 来实现更低级别的操作,例如窗口管理、系统信息获取、硬件访问等。Win32 API 是 Windows 操作系统的基础接口,能够提供大量的功能和灵活性。以下是一些常见的 Win32 API 函数和相关信息,以及如何在 WinForms 应用中调用它们。通过使用 Win32 API,WinForms 应用程序能够执行许多底层操作,包括窗口管理、文件操作、进程管理等。
2024-12-24 07:00:00
683
原创 存储库模式(Repository Pattern)深入解析:提高系统可扩展性与维护性的关键
存储库模式(Repository Pattern)最早出现在2003年,由在他的经典著作《Patterns of Enterprise Application Architecture》一书中提出。该书是设计模式和架构模式领域的权威作品之一,在软件开发社区具有广泛的影响。通过这本书系统地总结了企业级应用程序架构中的一系列常见模式,并在其中介绍了存储库模式。该模式的目的是为了简化数据访问,将其从业务逻辑中分离出来,从而实现更好的代码解耦和可维护性。在现代的领域驱动设计。
2024-12-23 07:00:00
872
原创 如何用Flask和Python构建Web API调用C++开发的DLL库文件并保存计算结果到Sqlite数据库
这篇博客介绍了如何使用 Flask 构建一个简单的 Web API,调用本地 DLL 文件进行计算,并将结果保存到 SQLite 数据库中。博客详细讲解了环境搭建、Flask 路由处理、与 DLL 的交互、结果存储及查询的全过程。此外,还解决了常见的 Python 编码问题,确保跨平台兼容性。适合有一定 Python 基础的开发者,特别是对 Web 开发、外部库调用和数据库操作有兴趣的读者。
2024-12-22 07:00:00
1178
原创 C++开发基础之结构体初始化方式的区别
在 C++ 中,结构体的初始化方式是一个非常重要的概念,特别是在处理复杂数据时,理解不同的初始化方式能够帮助我们写出更安全和高效的代码。和Data data;,以及它们之间的区别。结构体是 C++ 中一种非常常见的数据类型,它可以包含不同类型的成员变量。初始化结构体意味着为它的每个成员赋予初始值。不同的初始化方式不仅影响到成员变量的初始值,还会影响到程序的行为和内存安全性。理解 C++ 中结构体的初始化方式,对于写出稳定、安全的代码至关重要。
2024-12-20 14:22:18
607
原创 WinForm开发基础之操作注册表
在Windows操作系统中,注册表是一个存储配置信息和设置的重要数据库。它包含了系统和应用程序的配置信息,例如程序的安装路径、用户的个性化设置等适用场景。在WinForm应用程序中,注册表的操作通常用于保存应用程序的配置,如用户设置、窗口位置等。本文将介绍如何在WinForm中进行注册表操作,包括如何读取、写入、删除注册表项以及创建和删除键值。在WinForm应用程序中操作注册表是一个非常常见的需求,可以用于存储配置信息、程序设置等。通过类,开发者可以轻松地读取、写入、删除注册表键值。
2024-12-20 07:00:00
1232
原创 你觉得C#开发的Nativate AOT项目被其他C#开发项目调用有什么实际意义?
前面的文章我们讨论过什么是AOT,以及AOT适用于什么场景dotnet开发编译之争:Ahead-of-Time(AOT) vs Just-in-Time(JIT)谁才是未来最佳编译选择?如何在Net8.0平台下开发AOT项目。今天我们来聊聊将如何使用 Native AOT 编译DLL,并在另一个项目中引用它。在 C# 开发中,编译是一种将中间语言(IL)代码提前编译为原生机器代码的技术。这种方式可以减少运行时依赖、提升启动速度,并降低内存占用。
2024-12-19 07:00:00
648
原创 WinForm开发基础之点击事件防抖,避免重复操作
在 WinForm 开发过程中,我们经常会遇到这样的问题:用户快速双击(或多次点击)按钮,导致程序执行多次操作,可能会引发逻辑错误或性能问题。如何有效地防止按钮的重复点击,是需要解决的一个常见问题。本篇文章将介绍几种实用的方法,帮助在WinForm开发中防止按钮被双击,避免重复操作。在 WinForm 开发中,防止按钮被双击、避免重复操作的方法有很多。简单直接:使用按钮的Enabled属性禁用。防抖机制:适用于需要防止频繁点击的场景。标志位控制:适用于耗时操作的场景,确保操作完成前不重复执行。
2024-12-18 07:00:00
994
原创 WinForms开发基础之UI性能优化技巧中的局部刷新
在WinForms开发中,UI的流畅度直接影响到用户的体验。尤其是在数据量庞大或者频繁更新的场景下,频繁的全屏重绘可能导致性能瓶颈,从而影响应用的响应速度。为了解决这个问题,我们可以使用局部刷新技术,通过只刷新界面中变化的部分,来减少绘制操作的次数,提升应用的性能。本文将通过一个简单的案例,展示如何在WinForms中实现局部刷新并优化UI性能。局部刷新是指在需要重绘的情况下,仅重绘发生变化的区域,而不是整个控件或窗体。WinForms控件提供了方法,它会标记控件为需要重新绘制,通常会刷新整个控件区域。
2024-12-17 07:00:00
926
原创 解决几个常见的ASP.NET Core Web API 中多线程并发写入数据库失败的问题
在ASP.NET Core Web API应用程序中,当多个并发线程同时调用新增用户数据的接口时,可能会遇到数据库写入失败的问题。数据库连接池耗尽:每个线程都可能创建一个数据库连接,如果并发量过大,可能会导致数据库连接池用尽,从而无法创建新的连接,导致写入失败。数据一致性问题:多个线程同时写入数据库时,可能会造成数据冲突或违反唯一性约束。事务问题:没有适当的事务控制,多个线程可能在执行写入时发生数据不一致或冲突。接下来,我们将通过示例来说明如何解决这些问题。我们已经实现了一个针对。
2024-12-16 07:00:00
1609
原创 使用任务队列TaskQueue和线程池ThreadPool技术实现自定义定时任务框架详解
在桌面软件开发中,定时任务是一个常见的需求,比如定时清理日志、发送提醒邮件或执行数据备份等操作。在C#中有一个非常著名的定时任务处理库Hangfire,不过在我们深入了解Hangfire 之前,我们可以手动开发一个定时任务案例,用以帮助我们理解Hangfire的核心原理。我们可以利用 任务队列(Task Queue) 和 线程池(Thread Pool) 这两个核心概念,构建一个高效且具有良好扩展性的定时任务系统。本文将从零开始实现一个基于任务队列和线程池的定时任务框架,并结合实际应用场景进行详细解析。首先
2024-12-14 23:23:53
1329
原创 高效任务流处理:实现的多线程并发任务与合并结果
本文通过一个典型的任务流处理案例,展示了如何使用 C# 的多线程技术设计高效的任务流系统。在实际开发中,这种设计模式可以广泛应用于工业数据处理、日志分析、图像处理等场景。希望本文的内容能为你提供灵感。
2024-12-13 10:53:52
884
在ASP.NET Core WebAPI 中使用轻量级的方式实现一个支持持久化的缓存组件
2024-11-26
WinForms 中使用 MVVM 模式构建应用:实现登录页面、页面导航及 SQLite 数据库连接完整框架搭建过程
2024-11-02
EFCore面试指南,助你从初级到高级,轻松晋级
2024-08-31
TabFragmentDemo
2014-06-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人