在C#中,结构(struct)是一种将各种数据类型的变量组合在一起的值类型。尽管它们与类(class)非常相似,都是用户定义的数据类型,可以存储大量不同的数据类型,但结构是值类型,而类是引用类型。用户可以根据需要定义结构,因此它也被称为用户定义的数据类型。
在C#中使用struct关键字来定义结构。一个结构可以包含构造函数、常量、字段、方法、属性、索引器、事件等元素。
C#struct MyStruct
{
public int MyField;
public void MyMethod()
{
// 方法体
}
}
C#struct Book
{
public string Title;
public string Author;
public int Pages;
public Book(string title, string author, int pages)
{
Title = title;
Author = author;
Pages = pages;
}
public void DisplayInfo()
{
Console.WriteLine($"Title: {Title}, Author: {Author}, Pages: {Pages}");
}
}
结构不能有无参数的构造函数。它只能有静态构造函数或参数化构造函数。
C#struct Point
{
public int X;
public int Y;
public Point(int x, int y)
{
X = x;
Y = y;
}
}
与类类似,结构可以有方法、自动实现的属性和其他属性。
C#struct Rectangle
{
public int Width { get; set; }
public int Height { get; set; }
public int Area()
{
return Width * Height;
}
}
结构可以包含静态方法。
C#struct Counter
{
public static int Count;
static Counter()
{
Count = 0;
}
public void Increment()
{
Count++;
}
}
结构可以包含事件,以通知订阅者某个动作的发生。
C#struct Timer
{
public event EventHandler Tick;
public void OnTick()
{
if (Tick != null)
{
Tick(this, EventArgs.Empty);
}
}
}
在C#中,可以使用“=”(赋值)运算符将一个结构对象复制到另一个结构对象。
C#struct Person
{
public string Name;
public int Age;
}
Person person1 = new Person { Name = "Alice", Age = 30 };
Person person2 = person1;
随着现代显示器分辨率的多样化,以及高DPI(每英寸像素数)屏幕的普及,特别是不少机器调整了百分比显示,创建一个自适应的WinForms界面变得尤为重要。本文将详细介绍在WinForms中如何开发自适应界面,使应用程序在不同分辨率和缩放比例下表现一致。
在Windows应用程序中,显示设置可以影响应用程序的外观。WinForms提供了一些机制来帮助开发者打造自适应界面,但这需要一些配置。本文将带你一步一步实现这一过程。
Windows通过DPI(每英寸点数)和应用缩放比例(例如150%或200%)来处理不同分辨率显示器的内容渲染。WinForms提供了一些属性和方法来支持这些缩放设置。主要的概念有:
本文将介绍如何使用 C# 和 OpenXml SDK,从 Excel 文件中提取图片和嵌入对象。我们将以一个包含代码示例的完整项目为例,详细介绍实现过程。
你需要安装以下 NuGet 包:
你可以通过 NuGet 安装这些依赖包。在 Visual Studio 的“工具” -> “NuGet 包管理器” -> “包管理器控制台”中运行以下命令:
BashInstall-Package DocumentFormat.OpenXml
本文将从以下几个方面展开:
我们首先需要打开 Excel 文件并遍历其工作表部分,为后续的提取操作做准备。

领域驱动设计(DDD, Domain-Driven Design)是一种软件设计方法,旨在通过以领域为中心的方式建模,以应对复杂性并提高软件的灵活性和可维护性。DDD鼓励开发人员与领域专家密切合作,构建出能够反映业务需求的模型。它不仅仅是一个技术方法,更是一种开发哲学。
在DDD中,有一些关键概念是核心组成部分:
为了说明DDD的特点,我们将通过一个简单的库存管理系统的控制台应用程序来展示DDD的应用。此示例包含了领域、实体、值对象、领域服务、聚合、仓储和工厂等概念。
一个简单的库存管理
C#- InventoryManagement - Domain - Entities - Product.cs - ValueObjects - ProductId.cs - Services - InventoryService.cs - Factories - ProductFactory.cs - Repositories - IProductRepository.cs - Infrastructure - Repositories - InMemoryProductRepository.cs - Program.cs
在项目管理的世界里,甘特图是不可或缺的工具。它不仅能帮助你直观地展示项目进度,还能有效地管理任务和资源。然而,找到一个既强大又易用的甘特图控件并不容易。今天,我们为你推荐一款颠覆性的工具——.NET C# Winforms Gantt Chart 控件,它将彻底改变你的项目管理方式!

C#https://github.com/jakesee/ganttchart
这款控件完全基于.NET Framework,无需任何额外的预先条件。只需下载最新的源代码并在Microsoft Visual Studio 2017中构建库,你就可以立即开始使用。
.NET C# Winforms Gantt Chart 控件支持多种时间单位(周、天、小时),并且可以自定义其他时间分辨率。它还提供了单任务、分组任务、前置/后置任务、拆分任务和标记资源等功能。此外,每个任务都有完成百分比属性,帮助你更好地跟踪进度。
通过各种鼠标事件,你可以直接在甘特图上自定义用户界面体验。默认的鼠标命令可以通过继承来覆盖,满足你的个性化需求。
打印功能尊重页面边距、方向和每页的多个页面设置,确保你的甘特图在纸质版上也能完美呈现。
控件能够自动确定关键路径和浮动时间,帮助你更好地进行项目规划和风险管理。