一、发展历史

C#的主要作者是丹麦计算机科学家安德斯·海尔斯伯格(Anders Hejlsberg),他是该语言的首席设计师,同时也是Turbo Pascal(Pascal 语言编译器)、Delphi(由 Borland(后被 Embarcadero 收购)开发的面向对象编程语言与集成开发环境(IDE))和TypeScript(由微软开发的开源编程语言,JavaScript 的超级版)的创造者,以及.NET框架的创立者。‌‌

img

C#(读作 “C Sharp”)是由微软开发的面向对象编程语言,基于.NET 框架,旨在结合灵活性、性能和生产力。其发展历程如下:

1. 起源与早期版本(2000-2005)

  • 2000 年:C# 1.0 随.NET Framework 1.0 发布,设计灵感源自 C++、Java 和 Delphi,目标是简化企业级开发。

  • 2005 年:C# 2.0 引入泛型、匿名方法、可空类型和迭代器,增强类型安全和代码复用性。

2. 功能扩展(2007-2010)

  • 2007 年:C# 3.0 推出 Lambda 表达式、LINQ(语言集成查询)、自动属性和匿名类型,大幅提升数据查询效率。

  • 2010 年:C# 4.0 支持动态类型(dynamic)、命名参数、可选参数和 COM 互操作性,增强灵活性。

3. 异步与并行编程(2012-2015)

  • 2012 年:C# 5.0 引入async/await异步编程模型,简化异步操作的编写。

  • 2015 年:C# 6.0 增加异常过滤器、字典初始化语法、空条件运算符(?.)和 nameof 表达式,提升代码可读性。

4. 现代特性与跨平台(2017 - 至今)

  • 2017 年:C# 7.0 支持模式匹配、元组、局部函数和二进制字面量,增强代码表达力。

  • 2019 年:C# 8.0 引入 nullable 引用类型、异步流、范围运算符(..)和模式匹配增强,配合.NET Core 实现跨平台开发。

  • 2020 年:C# 9.0 推出记录类型(record)、顶级程序集、模式匹配改进和 init 只读属性。

  • 2022 年:C# 10.0 支持源生成器、文件范围命名空间、集合表达式改进和原始字符串字面量。

  • 2023 年:C# 11.0 新增泛型数学、集合切片、原始字符串内插和required修饰符,持续优化开发体验。

关键发展背景:

  • 随着.NET 从 Windows 平台扩展到.NET Core(2016)和统一的.NET(2020),C# 成为跨平台开发(Windows、macOS、Linux)的核心语言。

  • 社区驱动的改进通过.NET 基金会持续推进,例如通过 RFC(Request for Comments)收集开发者反馈。

二、开发工具

C# 开发工具覆盖从 IDE 到命令行,适配不同开发场景:

1. 集成开发环境(IDE)

Visual Studio

Visual Studio Code(VS Code)

JetBrains Rider

工具特点适用场景
Visual Studio微软官方全功能 IDE,支持调试、代码分析、UI 设计器,集成.NET 生态工具。企业级应用、Windows 桌面开发
Visual Studio Code(VS Code)轻量级跨平台编辑器,通过 C# 扩展包支持智能提示、调试和代码重构。跨平台开发、快速原型设计
JetBrains Rider跨平台 IDE,提供强大的代码分析、重构工具和多语言支持(如 C#、Kotlin)。专业开发者、复杂项目

2. 命令行工具

  • .NET CLI:跨平台命令行接口,用于创建项目、编译代码和管理依赖(如dotnet newdotnet build

  • MSBuild:微软构建平台,通过.csproj项目文件定义编译流程,支持自动化构建和 CI/CD

3. 辅助工具

  • Resharper(VS 插件):代码分析、重构建议和代码生成,提升开发效率。

  • NUnit/MSTest/xUnit:单元测试框架,支持自动化测试和断言。

  • Fiddler/Postman:接口调试工具,适用于 C# 开发的 Web 服务测试。

三、基础语法知识

初始化结构

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
​
namespace ConsoleApp2
{internal class Program{static void Main(string[] args){Console.WriteLine("Hello World");}}
}

1. 变量与数据类型

C# 是强类型语言,变量必须先声明后使用,且需指定类型或使用var隐式推断。

1.1 值类型(Value Types)

直接存储数据值,分配在栈内存中。常见值类型:

int age = 25;             // 整数(32位)
double height = 1.75;     // 双精度浮点数
bool isStudent = true;    // 布尔值
char grade = 'A';         // 字符(Unicode)
decimal salary = 5000.00m; // 高精度小数(金融计算)

特殊值类型

  • 枚举(enum)

    :定义命名常量集合:

    enum Color { Red, Green, Blue }
    Color favorite = Color.Blue;

  • 结构体(struct)

    :轻量级数据结构,可包含字段和方法:

    struct Point {public int X;public int Y;public double Distance() => Math.Sqrt(X*X + Y*Y);
    }

1.2 引用类型(Reference Types)

存储对象引用,实际数据在堆内存中。常见引用类型:

string name = "Doubao";   // 字符串(不可变)
object obj = 42;          // 基类型,可引用任何对象
int[] numbers = { 1, 2, 3 }; // 数组

动态类型(dynamic):运行时确定类型(C# 4.0+):

dynamic dynamicVar = "Hello";
dynamicVar = 123;         // 合法,运行时绑定
1.3 可空类型(Nullable Types)

处理值类型可能为null的场景(值类型默认不可为null):

int? nullableInt = null;  // 可空int
if (nullableInt.HasValue) {Console.WriteLine(nullableInt.Value);
} else {Console.WriteLine("Value is null");
}
​
// 空合并运算符(??)
int result = nullableInt ?? 0; // 若nullableInt为null,赋值0

2. 控制流语句

用于控制程序执行流程,支持常见的条件和循环结构。

2.1 条件语句
// if-else
int score = 85;
if (score >= 90) {Console.WriteLine("优秀");
} else if (score >= 80) {Console.WriteLine("良好");
} else {Console.WriteLine("一般");
}
​
// switch(支持模式匹配,C# 7.0+)
var day = DayOfWeek.Monday;
switch (day) {case DayOfWeek.Saturday:case DayOfWeek.Sunday:Console.WriteLine("周末");break;default:Console.WriteLine("工作日");break;
}
​
// switch表达式(C# 8.0+)
string result = day switch {DayOfWeek.Saturday or DayOfWeek.Sunday => "休息",_ => "工作"
};
2.2 循环语句
// for循环
for (int i = 0; i < 5; i++) {Console.WriteLine(i);
}// foreach循环(遍历集合)
var names = new List<string> { "Alice", "Bob" };
foreach (var name in names) {Console.WriteLine(name);
}// while循环
int count = 0;
while (count < 3) {Console.WriteLine(count++);
}// do-while循环(至少执行一次)
do {Console.WriteLine("执行一次");
} while (false);

3. 方法与参数

方法是代码复用的基本单元,支持多种参数传递方式。

3.1 方法定义与调用
// 方法定义(返回类型、方法名、参数列表)
int Add(int a, int b) {return a + b;
}// 调用方法
int sum = Add(3, 5); // sum = 8
3.2 参数传递方式
// 值传递(默认)
void Increment(int value) {value++; // 不影响原始值
}// 引用传递(ref关键字)
void Swap(ref int a, ref int b) {int temp = a;a = b;b = temp;
}
int x = 1, y = 2;
Swap(ref x, ref y); // x=2, y=1// 输出参数(out关键字)
void SplitName(string fullName, out string firstName, out string lastName) {var parts = fullName.Split(' ');firstName = parts[0];lastName = parts.Length > 1 ? parts[1] : "";
}
SplitName("John Doe", out var first, out var last);
3.3 可选参数与命名参数(C# 4.0+)
// 可选参数(提供默认值)
void PrintInfo(string name, int age = 0) {Console.WriteLine($"Name: {name}, Age: {age}");
}
PrintInfo("Alice"); // Age默认0// 命名参数(调用时指定参数名)
PrintInfo(age: 30, name: "Bob");

4. 面向对象基础

C# 是纯面向对象语言,支持封装、继承和多态。

4.1 类与对象
// 类定义
class Person {// 字段(通常私有)private string _name;// 属性(封装字段)public string Name {get => _name;set => _name = value;}// 自动属性(简化写法)public int Age { get; set; }// 构造函数public Person(string name, int age) {Name = name;Age = age;}// 方法public void SayHello() {Console.WriteLine($"Hello, I'm {Name}, {Age} years old.");}
}// 创建对象
var person = new Person("Charlie", 22);
person.SayHello(); // 输出: Hello, I'm Charlie, 22 years old.
4.2 继承与多态
// 基类
class Animal {public virtual void Speak() { // 虚方法,可被子类重写Console.WriteLine("Animal speaks");}
}// 派生类
class Dog : Animal {public override void Speak() { // 重写基类方法Console.WriteLine("Woof!");}
}// 多态调用
Animal animal = new Dog();
animal.Speak(); // 输出: Woof!
4.3 接口(Interface)

定义行为契约,类可实现多个接口:

interface ICanSwim {void Swim();
}interface ICanFly {void Fly();
}class Duck : ICanSwim, ICanFly {public void Swim() => Console.WriteLine("Swimming...");public void Fly() => Console.WriteLine("Flying...");
}

5. 集合与数组

用于存储和操作多个元素。

5.1 数组(Array)

固定长度,类型统一:

int[] numbers = new int[5]; // 声明长度为5的整数数组
numbers[0] = 100;// 初始化器语法
string[] names = { "Alice", "Bob", "Charlie" };// 多维数组
int[,] matrix = new int[3, 3];
5.2 泛型集合(推荐使用)

动态调整大小,类型安全:

// List<T>(动态数组)
var list = new List<int> { 1, 2, 3 };
list.Add(4);
foreach (var num in list) {Console.WriteLine(num);
}// Dictionary<TKey, TValue>(键值对)
var dict = new Dictionary<string, int> {["apple"] = 1,["banana"] = 2
};
Console.WriteLine(dict["apple"]); // 输出: 1// HashSet<T>(不重复集合)
var uniqueNumbers = new HashSet<int> { 1, 2, 2 }; // 实际只有1, 2

6. 异常处理

使用try-catch-finally结构捕获和处理运行时错误:

try {int result = 10 / 0; // 抛出DivideByZeroException
}
catch (DivideByZeroException ex) {Console.WriteLine("错误:除数不能为零");Console.WriteLine(ex.Message);
}
catch (Exception ex) {Console.WriteLine("未知错误:" + ex.Message);
}
finally {Console.WriteLine("无论是否出错,都会执行此代码");
}

自定义异常

csharp

public class CustomException : Exception {public CustomException(string message) : base(message) { }
}

7. 命名空间与程序集

  • 命名空间(Namespace):组织代码,避免命名冲突:

    csharp

    namespace MyApp.Data {public class DatabaseConnection { /* ... */ }
    }// 使用其他命名空间的类型
    using MyApp.Data;
    var conn = new DatabaseConnection();

  • 程序集(Assembly):物理打包单元(.dll 或.exe),包含类型和资源。

8. 现代 C# 语法糖(C# 6.0+)

简化代码编写:

// 字符串内插(C# 6.0+)
string name = "Doubao";
Console.WriteLine($"Hello, {name}!"); // 替代string.Format// 表达式体方法(C# 6.0+)
public string GetFullName() => $"{FirstName} {LastName}";// 空条件运算符(C# 6.0+)
string result = person?.Name?.ToUpper(); // 若person或Name为null,直接返回null// 模式匹配(C# 7.0+)
object obj = 42;
if (obj is int num) { // 类型模式匹配并赋值Console.WriteLine(num);
}// 元组(Tuple)(C# 7.0+)
(string First, string Last) GetName() => ("John", "Doe");
var (first, last) = GetName();

通过上述内容,你已了解 C# 的基础语法结构。进一步学习可深入高级特性(如 LINQ、异步编程)或框架应用(如ASP.NET Core)。

四、c#代码框架

C# 代码框架通常指项目的组织结构和基础代码结构,它决定了代码的可维护性、可扩展性和可测试性。以下是常见的 C# 代码框架设计原则和示例:

1.解决方案(Solution)结构

一个完整的 C# 应用通常包含多个项目,按职责划分:

plaintext

MySolution/
├── src/                   # 源代码目录
│   ├── MyApp.Domain/      # 领域模型(实体、值对象、领域服务)
│   ├── MyApp.Application/ # 应用服务(业务逻辑)
│   ├── MyApp.Infrastructure/ # 基础设施(数据库、文件系统等)
│   └── MyApp.WebApi/      # Web API 接口层
└── tests/                 # 测试项目├── MyApp.UnitTests/   # 单元测试└── MyApp.IntegrationTests/ # 集成测试
MySolution/
├── src/                   # 源代码目录
│   ├── MyApp.Domain/      # 领域模型(实体、值对象、领域服务)
│   ├── MyApp.Application/ # 应用服务(业务逻辑)
│   ├── MyApp.Infrastructure/ # 基础设施(数据库、文件系统等)
│   └── MyApp.WebApi/      # Web API 接口层
└── tests/                 # 测试项目├── MyApp.UnitTests/   # 单元测试└── MyApp.IntegrationTests/ # 集成测试

2.项目结构示例

ASP.NET Core Web API 项目 为例,典型的项目结构如下:

​
// MyApp.WebApi (ASP.NET Core Web API)
public class Program
{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});
}​public class Startup
{public void ConfigureServices(IServiceCollection services){// 注册服务services.AddControllers();services.AddSwaggerGen();// 依赖注入配置services.AddScoped<IMyService, MyService>();services.AddDbContext<ApplicationDbContext>(options =>options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));}public void Configure(IApplicationBuilder app, IWebHostEnvironment env){// 配置中间件if (env.IsDevelopment()){app.UseDeveloperExceptionPage();app.UseSwagger();app.UseSwaggerUI();}app.UseRouting();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}
}

3.分层架构实现

1. 领域层(Domain)
// MyApp.Domain
public class Product // 实体
{public Guid Id { get; private set; }public string Name { get; private set; }public decimal Price { get; private set; }public Product(string name, decimal price){Id = Guid.NewGuid();Name = name;Price = price;}public void UpdatePrice(decimal newPrice){if (newPrice <= 0) throw new ArgumentException("价格必须大于0");Price = newPrice;}
}public interface IProductRepository // 仓储接口
{Task<Product> GetByIdAsync(Guid id);Task AddAsync(Product product);Task UpdateAsync(Product product);
}
2. 应用层(Application)
// MyApp.Application
public class ProductService : IProductService // 应用服务
{private readonly IProductRepository _repository;public ProductService(IProductRepository repository){_repository = repository;}public async Task<ProductDto> GetProductAsync(Guid id){var product = await _repository.GetByIdAsync(id);if (product == null) throw new NotFoundException("产品不存在");return new ProductDto // 映射到DTO{Id = product.Id,Name = product.Name,Price = product.Price};}public async Task UpdateProductPriceAsync(Guid id, decimal newPrice){var product = await _repository.GetByIdAsync(id);product.UpdatePrice(newPrice);await _repository.UpdateAsync(product);}
}public class ProductDto // 数据传输对象
{public Guid Id { get; set; }public string Name { get; set; }public decimal Price { get; set; }
}
3. 基础设施层(Infrastructure)
// MyApp.Infrastructure
public class EfCoreProductRepository : IProductRepository // EF Core 实现
{private readonly ApplicationDbContext _context;public EfCoreProductRepository(ApplicationDbContext context){_context = context;}public async Task<Product> GetByIdAsync(Guid id){return await _context.Products.FindAsync(id);}public async Task AddAsync(Product product){await _context.Products.AddAsync(product);await _context.SaveChangesAsync();}public async Task UpdateAsync(Product product){_context.Products.Update(product);await _context.SaveChangesAsync();}
}public class ApplicationDbContext : DbContext // 数据库上下文
{public DbSet<Product> Products { get; set; }public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options): base(options){}
}
4. 接口层(Web API)
// MyApp.WebApi
[ApiController]
[Route("[controller]")]
public class ProductsController : ControllerBase
{private readonly IProductService _service;public ProductsController(IProductService service){_service = service;}[HttpGet("{id}")]public async Task<ActionResult<ProductDto>> GetProduct(Guid id){var product = await _service.GetProductAsync(id);return Ok(product);}[HttpPut("{id}/price")]public async Task<IActionResult> UpdateProductPrice(Guid id, [FromBody] decimal newPrice){await _service.UpdateProductPriceAsync(id, newPrice);return NoContent();}
}

4.常用框架组件

  1. 依赖注入(DI)

    // 注册服务
    services.AddSingleton<IMySingletonService, MySingletonService>();
    services.AddScoped<IMyScopedService, MyScopedService>();
    services.AddTransient<IMyTransientService, MyTransientService>();

  2. 配置管理

    // appsettings.json
    {"ConnectionStrings": {"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDb"},"AppSettings": {"Timeout": 3000}
    }// 读取配置
    var timeout = Configuration.GetValue<int>("AppSettings:Timeout");

  3. 日志记录

    private readonly ILogger<MyService> _logger;public MyService(ILogger<MyService> logger)
    {_logger = logger;
    }public void DoWork()
    {_logger.LogInformation("工作开始");try{// 业务逻辑}catch (Exception ex){_logger.LogError(ex, "工作失败");throw;}
    }

  4. 异步编程

    public async Task<IEnumerable<Product>> GetProductsAsync()
    {return await _context.Products.AsNoTracking().ToListAsync();
    }

5.测试框架

// MyApp.UnitTests (xUnit + Moq)
public class ProductServiceTests
{private readonly Mock<IProductRepository> _mockRepository;private readonly ProductService _service;public ProductServiceTests(){_mockRepository = new Mock<IProductRepository>();_service = new ProductService(_mockRepository.Object);}[Fact]public async Task GetProductAsync_ShouldReturnProduct(){// Arrangevar productId = Guid.NewGuid();var mockProduct = new Product("测试产品", 9.99m) { Id = productId };_mockRepository.Setup(r => r.GetByIdAsync(productId)).ReturnsAsync(mockProduct);// Actvar result = await _service.GetProductAsync(productId);// AssertAssert.NotNull(result);Assert.Equal(productId, result.Id);Assert.Equal("测试产品", result.Name);}
}

6.推荐的框架和库

  1. Web 开发

    • ASP.NET Core

    • Minimal APIs

    • Blazor (前端框架)

  2. 数据访问

    • Entity Framework Core

    • Dapper

    • MongoDB.Driver

  3. 测试

    • xUnit/NUnit/MSTest

    • Moq

    • FluentAssertions

  4. 工具

    • AutoMapper (对象映射)

    • MediatR (CQRS 模式)

    • Serilog (日志)

    • Polly (弹性和瞬态故障处理)

步编程)或框架应用(如ASP.NET Core)。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb笔记03

七、Maven1_概述Maven 是专门用于管理和构建 Java 项目的工具&#xff0c;它的主要功能有: 提供了一套标准化的项目结构 提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布……&#xff09; 提供了一套依赖管理机制1.标准化的项目结…

AIGC自我介绍笔记

AIGC&#xff08;人工智能生成内容&#xff09;项目是指利用人工智能技术&#xff08;如深度学习、生成对抗网络、大规模预训练模型等&#xff09;自动生成文本、图像、音频、视频等多模态内容的系统性工程。这类项目通过算法模型学习海量数据&#xff0c;实现内容的自动化、个…

从docker-compose快速入门Docker

不得不提容器化技术是未来的一个发展方向&#xff0c;它彻底释放了计算虚拟化的威力&#xff0c;极大提高了应用的运行效率&#xff0c;降低了云计算资源供应的成本&#xff01;使用 Docker&#xff0c;可以让应用的部署、测试和分发都变得前所未有的高效和轻松&#xff01;无论…

【BERT_Pretrain】Wikipedia_Bookcorpus数据预处理(二)

上一篇介绍了wikipedia和bookcopus数据集&#xff0c;这一篇主要讲一下如何预处理数据&#xff0c;使其可以用于BERT的Pretrain任务MLM和NSP。 MLM是类似于完形填空的任务&#xff0c;NSP是判断两个句子是否连着。因此数据预处理的方式不同。首先&#xff0c;拿到原始数据集&a…

人工智能-基础篇-14-知识库和知识图谱介绍(知识库是基石、知识图谱是增强语义理解的知识库、结构化数据和非结构化数据区分)

在人工智能&#xff08;AI&#xff09;领域&#xff0c;知识图谱&#xff08;Knowledge Graph&#xff09;和知识库&#xff08;Knowledge Base&#xff09;是两种重要的知识表示和管理技术&#xff0c;它们的核心目标是通过结构化的方式组织信息&#xff0c;从而支持智能系统的…

7月1日作业

思维导图 一、将当前的时间写入到time.txt的文件中&#xff0c;如果ctrlc退出之后&#xff0c;在再次执行支持断点续写 1.2022-04-26 19:10:20 2.2022-04-26 19:10:21 3.2022-04-26 19:10:22 //按下ctrlc停止&#xff0c;再次执行程序 4.2022-04-26 20:00:00 5.2022-04-26 20:0…

DHCP中继及动态分配

DHCP中继 在多 VLAN 网络中为什么不能直接用 DHCP&#xff1f; 比如你现在的网络是&#xff1a;PC 在 VLAN10、VLAN20 中DHCP服务器&#xff08;Router0&#xff09;在另一个网段&#xff08;比如 192.168.100.0/24&#xff09;PC 的 DHCP Discover 是广播&#xff0c;无法跨越…

ROS 概述与环境搭建

1. ROS 简介 1.1 ROS 诞生背景 机器人是一种高度复杂的系统性实现&#xff0c;机器人设计包含了机械加工、机械结构设计、硬件设计、嵌入式软件设计、上层软件设计....是各种硬件与软件集成&#xff0c;甚至可以说机器人系统是当今工业体系的集大成者。 机器人体系是相当庞大的…

mac python3.13 selenium安装使用

一、安装 # 进入虚拟环境 workon xxxx pip install selenium二、安装驱动 查询自己浏览器版本 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --versionGoogle Chrome 138.0.7204.93下载对应的驱动&#xff0c;其他版本 sudo mv ~/Downloads/chromedr…

AI 开发平台:中小企业的创新破局点在哪里?

在浙江义乌的一个小商品加工厂里&#xff0c;老板王建国最近有点烦。订单量忽高忽低&#xff0c;原材料价格波动不定&#xff0c;他想通过数据分析提前规划生产&#xff0c;却苦于没有专业的技术团队&#xff1b;在广东东莞的一家电子配件公司&#xff0c;业务员李娜每天要处理…

.NET 8.0 Redis 教程

一、环境准备 1. 安装 Redis 服务器 Windows/macOS/Linux&#xff1a;使用 Docker 快速部署 bash docker run -d --name redis -p 6379:6379 redisLinux&#xff1a;直接安装 bash sudo apt-get install redis-server sudo systemctl start redis-server2. 创建 .NET 项目 b…

2025年游戏鼠标推荐,游戏鼠标推荐,打CSGO(罗技、雷蛇、卓威、ROG、漫步者、赛睿、达尔优)

可能很多人对于游戏鼠标的了解还是不够深&#xff0c;会有很多疑问&#xff0c;比如&#xff1a;“游戏鼠标和办公鼠标的区别”、“游戏鼠标无线好还是有线好”等等一系列的问题&#xff0c;本文将会介绍游戏鼠标领域处于领先地位的几个厂家&#xff1a;罗技鼠标、雷蛇鼠标、赛…

OpenCV CUDA模块设备层-----在 GPU上高效地执行两个uint类型值的最小值比较函数vmin2()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 OpenCV 的CUDA模块&#xff08;cudev&#xff09; 中的一个设备端内联函数&#xff0c;用于在GPU上高效地执行两个uint类型值的最小值比较。 该函…

Web3与传统网络安全模型对比:关键差异解析

随着互联网技术的飞速发展&#xff0c;Web3的概念逐渐成为人们关注的焦点。Web3代表着一个更加去中心化、安全和用户友好的网络环境。与传统的网络安全模型相比&#xff0c;Web3在多个方面展现出了其独特的优势和特点。本文将深入探讨Web3与传统网络安全模型之间的关键差异。 …

FLAN:微调语言模型是 Zero-Shot 学习者

摘要 本文探讨了一种简单的方法来提升语言模型的零样本学习能力。我们展示了指令微调——即在通过指令描述的数据集集合上对语言模型进行微调——能够显著提升模型在未见任务上的零样本表现。 我们以一个拥有1370亿参数的预训练语言模型为基础&#xff0c;在60多个通过自然语…

springboot中的事件发布和监听

事件定义 创建一个自定义事件类 UserLoginEvent&#xff0c;继承 ApplicationEvent&#xff0c;用于携带用户登录信息&#xff1a; import org.springframework.context.ApplicationEvent;public class UserLoginEvent extends ApplicationEvent { //关键点1&#xff1a;ext…

“开源双轨架构+40亿参数扩散Transformer——ComfyUI-OmniGen2本地部署教程:重塑多模态生成的效率边界!

一、简介 OmniGen2 是由北京智源研究院最新推出的一个强大、高效的开源多模态生成模型。与 OmniGen v1 不同&#xff0c;OmniGen2 具有两种不同的文本和图像模态解码路径&#xff0c;利用非共享参数和解耦的图像分词器。OmniGen2 在四个主要功能方面具有竞争力的性能&#xff…

Java的SpringAI+Deepseek大模型实战之会话记忆

文章目录 背景项目环境实现步骤第一步、定义会话存储方式方式一、定义记忆存储ChatMemory方式二、注入记忆存储ChatMemory 第二步、配置会话记忆方式一、老版本实现方式二、新版本实现 第三步、存储会话信息 异常处理1、InMemoryChatMemory 无法解析 背景 前两期【环境搭建】和…

RDS MySQL vs. Aurora MySQL:高需求工作负载的终极迁移指南

在 AWS 上&#xff0c;开发团队最常见且关键的决策之一就是选择合适的关系型数据库。通常&#xff0c;讨论会从 RDS for MySQL 这个可靠且熟悉的“老黄牛”开始。但很快&#xff0c;就会有人提到一个更强大、更云原生的选项&#xff1a;Aurora MySQL。 也许&#xff0c;就像最…

使用仓颉编程语言是一种怎样的体验?

2024年6月21日下午&#xff0c;华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用&#xff0c;全新出发&#xff01;》中向全球开发者介绍了华为自研仓颉编程语言&#xff0c;并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开仓颉编程语言。 …