C# 4.0新特性揭秘:可选参数和命名参数如何提升开发效率

第一章:C# 4.0可选参数与命名参数概述

C# 4.0 引入了可选参数和命名参数两项重要语言特性,显著提升了方法调用的灵活性和代码的可读性。通过合理使用这些特性,开发者可以减少方法重载的数量,简化复杂参数列表的调用逻辑。

可选参数

可选参数允许在定义方法时为参数指定默认值。调用方法时,可以省略这些参数,编译器将自动使用其默认值。

// 定义带有可选参数的方法
public void PrintMessage(string message, string prefix = "Info", int repeatCount = 1)
{
    for (int i = 0; i < repeatCount; i++)
    {
        Console.WriteLine($"{prefix}: {message}");
    }
}

// 调用示例
PrintMessage("系统启动"); 
// 输出: Info: 系统启动

PrintMessage("错误发生", "Error"); 
// 使用默认 repeatCount

命名参数

命名参数允许在调用方法时通过参数名称指定值,而不必遵循参数的原始顺序。这在处理具有多个可选参数的方法时尤为有用。

// 使用命名参数调用
PrintMessage(message: "备份完成", repeatCount: 3, prefix: "Backup");
// 参数顺序可变,代码更清晰

优势对比

特性优点适用场景
可选参数减少重载,简化接口多数参数有合理默认值
命名参数提升调用可读性参数多且易混淆顺序
  • 可选参数必须放在必需参数之后
  • 默认值必须是编译时常量
  • 命名参数可与位置参数混合使用

第二章:可选参数的原理与应用

2.1 可选参数的语言设计动机与语法规范

在现代编程语言中,可选参数的设计旨在提升函数调用的灵活性与代码可读性。通过允许调用者省略部分参数,使用预设默认值,避免了大量重载函数的冗余定义。
语法结构与示例
以 TypeScript 为例,可选参数通过在参数名后添加问号 ? 标识:

function createUser(name: string, age?: number, isActive: boolean = true) {
  return { name, age, isActive };
}
上述代码中,age? 表示该参数可选,而 isActive 提供默认值。调用时可仅传入必填参数:createUser("Alice")。
设计优势分析
  • 减少函数重载数量,简化 API 接口
  • 增强调用端代码可读性,明确关键参数
  • 支持向后兼容的接口扩展
该机制广泛应用于配置对象、构造函数及服务初始化场景。

2.2 编译器如何处理默认参数值

在编译阶段,带有默认参数的函数会被编译器预处理为调用时显式传递参数的形式。当调用方未提供实参时,编译器自动插入默认值作为实际参数。
默认参数的语法与行为
以 C++ 为例,函数声明中可指定默认参数:
void connect(int timeout = 5000, bool retry = true);
若调用 connect(),编译器将其转换为 connect(5000, true),所有默认值在编译期确定。
默认值的绑定时机
  • 默认参数值必须是常量表达式或可在编译期求值的表达式
  • 若默认值引用全局变量,其值取自调用点的编译时上下文
多文件环境下的处理规则
场景编译器行为
头文件中声明默认值各翻译单元独立解析,需保持一致
重复定义默认值编译报错

2.3 可选参数在方法重载中的替代作用

在现代编程语言中,可选参数逐渐成为简化方法重载的有效手段。传统方法重载通过定义多个同名函数、不同参数列表实现多态性,但会增加代码冗余。
可选参数的优势
使用可选参数,开发者可在单一方法中覆盖多种调用场景,减少方法数量。例如在 C# 中:

public void SendNotification(string message, bool isUrgent = false, int retryCount = 1)
{
    // 发送通知逻辑
    Console.WriteLine($"Message: {message}, Urgent: {isUrgent}, Retries: {retryCount}");
}
该方法通过设置 isUrgent 和 retryCount 的默认值,替代了原本需要三个重载版本才能实现的功能。
与方法重载的对比
  • 可选参数减少 API 表面复杂度
  • 调用方只需记忆一个方法签名
  • 维护成本更低,避免重复逻辑
当默认行为明确时,优先使用可选参数是更优雅的设计选择。

2.4 实践案例:简化构造函数与工厂方法

在构建复杂对象时,过多的构造函数参数会导致代码可读性下降。通过引入工厂方法,可以封装对象创建逻辑,提升代码的可维护性。
问题场景
假设需要创建不同类型的数据库连接对象,若使用多个构造函数,易造成“构造函数膨胀”。
解决方案:工厂方法模式
使用工厂类集中管理对象创建过程:

type Database struct {
    host string
    port int
    ssl  bool
}

type DatabaseFactory struct{}

func (f *DatabaseFactory) CreateMySQL(host string) *Database {
    return &Database{host: host, port: 3306, ssl: true}
}

func (f *DatabaseFactory) CreatePostgres(host string) *Database {
    return &Database{host: host, port: 5432, ssl: false}
}
上述代码中,CreateMySQL 和 CreatePostgres 方法分别封装了不同数据库的默认配置,调用方无需了解具体参数细节,仅需关注所需类型。
  • 工厂方法解耦了对象创建与使用
  • 支持后续扩展新数据库类型
  • 避免重复的初始化逻辑

2.5 使用陷阱与最佳实践建议

在使用 etcd 的过程中,开发者常因误用 API 或忽略集群特性而陷入性能瓶颈或数据一致性问题。合理规避陷阱并遵循最佳实践至关重要。
避免长时间运行的事务
etcd 的事务机制虽强大,但长时间持有会阻塞其他写操作。应尽量缩短事务执行时间。
txn := client.Txn(ctx)
txn.If(clientv3.Compare(clientv3.Version("/key"), ">", 0)).
    Then(clientv3.OpPut("/key", "value")).
    Else(clientv3.OpPut("/key", "default"))
if _, err := txn.Commit(); err != nil {
    log.Fatal(err)
}
该代码展示了一个条件更新事务。关键在于比较版本号后立即提交,避免延迟导致锁争用。
合理设置超时与重试策略
网络波动常见,客户端需配置合理的 dial 超时、请求超时及自动重试机制。
  • 设置连接超时不超过 5 秒
  • 启用 gRPC 重试拦截器
  • 使用指数退避算法进行重连

第三章:命名参数的机制与优势

3.1 命名参数的语法结构与调用规则

命名参数允许在函数调用时显式指定参数名称,提升代码可读性与维护性。其核心在于调用时使用 参数名: 值 的形式传递数据。
基本语法示例
func createUser(name string, age int, isActive bool) {
    fmt.Printf("用户: %s, 年龄: %d, 激活状态: %t\n", name, age, isActive)
}

// 调用时使用命名参数风格(模拟)
createUser(name: "Alice", age: 30, isActive: true)
尽管Go语言本身不支持命名参数,但可通过结构体模拟实现。上述代码通过结构体字段明确参数含义,避免位置依赖。
调用规则要点
  • 参数顺序不再影响调用正确性
  • 可选参数可通过指针或结构体零值机制实现
  • 必须确保参数名与函数定义完全匹配

3.2 提升代码可读性的实际应用场景

在团队协作开发中,清晰的命名和结构化逻辑显著提升维护效率。例如,在处理订单状态流转时,使用语义化常量替代魔法值:

const (
    OrderPending   = "pending"
    OrderPaid      = "paid"
    OrderShipped   = "shipped"
    OrderCompleted = "completed"
)
上述代码通过定义明确的状态常量,避免了字符串硬编码,使条件判断逻辑更易理解。配合枚举式设计,后续扩展新状态时也更具一致性。
函数职责单一化
将复杂逻辑拆分为小函数,如从“计算折扣”中分离“会员等级判定”和“优惠叠加规则”,每个函数只做一件事,提升测试性和可读性。
  • 减少认知负担,新人可快速定位核心逻辑
  • 便于单元测试覆盖边界条件

3.3 与可选参数协同使用的高级技巧

在现代函数设计中,可选参数常与默认值、解构赋值结合使用,以提升接口灵活性。通过对象解构接收配置项,能有效避免参数顺序依赖。
解构与默认值结合

function connect({ host = 'localhost', port = 8080, ssl = false } = {}) {
  console.log(`Connecting to ${host}:${port} via ${ssl ? 'HTTPS' : 'HTTP'}`);
}
该函数接受一个可选的配置对象。即使调用时未传参数,= {} 确保解构安全。各字段的默认值独立生效,互不干扰。
参数合并策略
  • 优先使用调用时传入的值
  • 未提供时回退至默认值
  • 支持部分配置覆盖,保留其余默认行为
此模式广泛用于 API 客户端、插件初始化等场景,兼顾简洁性与扩展性。

第四章:综合实战与性能分析

4.1 构建灵活的API接口:以数据访问层为例

在现代后端架构中,数据访问层(DAL)是API灵活性的核心。通过抽象数据库操作,可实现业务逻辑与存储细节的解耦。
接口设计原则
遵循依赖倒置原则,定义清晰的数据访问接口:
// DataAccessor 定义通用数据操作
type DataAccessor interface {
    GetByID(id string) (*User, error)
    Save(user *User) error
    Delete(id string) error
}
该接口屏蔽底层实现差异,便于切换ORM或存储引擎。
多实现支持
可通过配置动态加载不同实现:
  • MySQL 实现使用 GORM 映射结构体
  • MongoDB 实现利用 bson 标签处理文档
  • Mock 实现用于单元测试隔离依赖
性能监控集成
在代理层嵌入调用统计:
记录每次查询耗时与QPS趋势

4.2 单元测试中命名参数提升断言清晰度

在编写单元测试时,断言的可读性直接影响维护效率。使用命名参数能显著提升测试代码的语义清晰度,使开发者快速理解预期行为。
命名参数增强语义表达
通过显式指定参数名称,测试方法调用不再依赖参数顺序,且意图更加明确。

func TestCalculateDiscount(t *testing.T) {
    result := CalculateDiscount(
        basePrice: 100,
        isVIP:     true,
        coupon:    "SUMMER",
    )
    if result != 80 {
        t.Errorf("期望折扣后价格为 80,实际为 %d", result)
    }
}
上述代码中,basePrice、isVIP 和 coupon 均为命名参数(模拟语法),使调用逻辑一目了然。即使参数较多,也能避免混淆。
对比传统位置参数
  • 位置参数易错:顺序错误难以察觉
  • 命名参数自文档化:无需查看函数定义即可理解用途
  • 可选参数支持更灵活的测试场景构造

4.3 可选参数对IL代码生成的影响分析

在C#中,可选参数通过编译时默认值注入影响IL代码结构。当方法声明包含默认值时,编译器会在调用处内联该值,而非传递运行时计算结果。
代码示例与IL行为对比
void PrintMessage(string msg = "Hello") {
    Console.WriteLine(msg);
}
// 调用:PrintMessage();
上述代码在调用时,编译器会将 `"Hello"` 直接嵌入调用方的IL指令中,等效于硬编码传参。
IL生成差异分析
  • 可选参数导致调用方生成ldstr指令加载默认值
  • 被调方法仍保留参数定义,但不负责初始化
  • 若修改默认值需重新编译所有调用方
这种机制提升了执行效率,但削弱了二进制兼容性。

4.4 版本兼容性与程序集演进策略

在 .NET 生态中,程序集的版本控制是保障系统稳定演进的核心机制。通过强命名程序集和程序集版本号(Major.Minor.Build.Revision),可精确控制依赖关系。
程序集绑定重定向
当多个组件依赖不同版本的同一程序集时,可通过配置文件实现运行时绑定重定向:
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MyLibrary" publicKeyToken="abc123" culture="neutral" />
        <bindingRedirect oldVersion="1.0.0.0-2.9.9.9" newVersion="3.0.0.0" />
      <dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
上述配置将对 MyLibrary 的旧版本请求重定向至 v3.0.0.0,避免“DLL 地狱”。
语义化版本设计原则
  • 主版本号变更:不兼容的 API 修改
  • 次版本号变更:向后兼容的功能新增
  • 修订号变更:修复补丁,无新功能
合理规划版本号有助于消费者判断升级风险。

第五章:总结与未来展望

云原生架构的演进方向
随着 Kubernetes 成为容器编排的事实标准,企业级应用正加速向云原生迁移。例如,某金融企业在其核心交易系统中引入 Service Mesh 架构,通过 Istio 实现细粒度流量控制和零信任安全策略。

// 示例:Istio 中自定义 VirtualService 路由规则
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: payment-route
spec:
  hosts:
    - payment-service
  http:
    - route:
        - destination:
            host: payment-service
            subset: v1
          weight: 80
        - destination:
            host: payment-service
            subset: v2
          weight: 20
可观测性体系的构建实践
现代分布式系统依赖完整的可观测性三大支柱:日志、指标与链路追踪。以下为某电商平台在生产环境中部署的监控组件组合:
组件用途部署方式
Prometheus采集服务指标Kubernetes Operator
Loki日志聚合StatefulSet
Jaeger分布式追踪Sidecar 模式
边缘计算与 AI 推理融合趋势
在智能制造场景中,AI 模型需在边缘节点实时处理传感器数据。某汽车装配线采用 KubeEdge 将训练好的缺陷检测模型下沉至车间网关设备,推理延迟从 350ms 降低至 68ms。
  • 使用 ONNX Runtime 优化模型跨平台兼容性
  • 通过 MQTT 协议接入 PLC 数据流
  • 边缘节点定期与云端同步模型版本
Microsoft .NET Framework 4.0快速安装包(x86架构专用) NET Framework 4.0 是微软在2010年发布的重要版本,为Windows平台上的应用程序开发提供了全面支持。该版本不仅增强了对C# 4.0和VB.NET语言特性的支持,还优化了底层运行时环境,提升了应用程序的性能与稳定性。本章将从整体上介绍 .NET Framework 4.0 的核心组成,包括CLR(公共语言运行时)、BCL(基础类库)和ASP.NET等模块。 阅读详情

相关推荐

头歌操作系统 课堂练习4.2:页式内存管理 答案 无解析

头歌操作系统 课堂练习4.2:页式内存管理 答案 无解析

kercii的博客 1万+

C#4.0 新特性, dynamic, 可选参数,协变与抗变 (转)

 C#4.0新特性之(一)动态查找在大神Anders的领导下,C#这门语言也越来越快地朝着编程语言宇宙第一神器进化,C#4.0的新特征都是围绕“动态”(dynamic)的概念的,本文我们先来看看第一个新特性:动态查找(Dynamic Lookup)。1.初识dynamic动态查找允许动态(即在运行时)实现对某个对象的操作与对象类型的绑定,而不管这个对象是来自COM,IronPython

1879

基于docker进行安装部署seata,解决Seata的版本与Nacos的版本不匹配

本文分享了在Docker环境下部署Seata时遇到Nacos 3.x API不兼容问题的解决方案。由于Seata 2.0.0内置的nacos-client 1.4.2无法调用Nacos 3.x重构后的接口,导致注册失败。通过下载Seata 2.6.0源码自行构建Docker镜像,并调整启动方式(直接执行Java命令绕过Shell脚本),最终成功实现与Nacos 3.x的集成。关键步骤包括:创建自定义Dockerfile、配置application.yml、处理启动脚本兼容性问题,最终采用java直接运行方案

Dd52698的博客 407

C# 4.0 新特性dynamic、可选参数、命名参数等

1.dynamic ExpandoObject 熟悉js的朋友都知道js可以这么写 : 1 var t = newObject(); 2 t.Abc = ‘something’;

soarheaven的专栏 738

高通8155车机系统里,安卓和QNX是怎么‘打电话’的?聊聊HAB通信框架那些事

本文深入解析了高通8155车机系统中HAB通信框架如何实现安卓与QNX的高效协同。作为异构系统的通信桥梁,HAB通过共享内存和中断信号机制,在多媒体数据传输中展现出零拷贝、硬件加速等优势,成为智能座舱实现实时性与生态丰富性平衡的关键技术。

weixin_42715608的博客 382

从零开始掌握机械臂运动控制:原理、建模与实践

本文系统介绍了机械臂运动控制的核心原理与实践方法。从运动学与动力学建模的基础理论出发,详细解析了经典PID控制与现代MPC(模型预测控制)算法的应用,并通过ROS与MATLAB仿真案例,指导读者从零开始实现机械臂的轨迹规划与精准控制,为工业自动化应用提供完整的技术路径。

weixin_29099217的博客 565

【转自木子博客】C# 4.0新特性(白皮书)

 原文地址:http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=csharpfuture&DownloadId=3550(Word格式,需接受许可协议并下载。)译文地址:http://www.cnblogs.com/AndersLiu/archive/2008/11/03/1325148

剑胆琴心-.Net 学习笔记 1314

天线学习笔记——HFSS简单阵列天线

在HFSS15.0版本中使用 Radiation --> Antenna Array Setup 设置天线阵列的参数时的设计列表如下: 值得注意的是,在该版本中所定义的是:第一个阵元的位置坐标(First Cell Position)、阵元之间的间距(Directions)和阵元的数量(Number of Cells) 这些参数。 在ANSYS中的HFSS仿真中定义天线阵列如下: 与老版本不同的是:中心点坐标(Center Position)和布局设置(Layout Setting)。在布局设置中

Ethan的博客 1万+

C# 4.0 特性 -- 命名参数和可选参数

C# 4.0 新特性 -- 命名参数和可选参数 有了命名参数,我们将不用匹配参数在所调用方法中的顺序 每个参数可以按照参数名字进行指定 Test(1, 1.2f, true); Test(f: 3.3f, i: 5, b: false); Test(b: false, f: 3.4f, i: 3); 命名参数可以配合可选参数使用,让我们做到跳过其中的...

unityofficial的博客 94

保姆级教学:从0搭建微信小程序SpringBoot+Vue(一)

目标:实现一个微信小程序从后端数据库MySQL获取的商品展示页。 框架:后端采用SpringBoot,前端采用Vue,数据库MySQL。 部署工具:IntelliJ IDEA 2024.2专业版+HbuilderX+Node+微信开发者工具,jdk1.8已安装

weixin_44545610的博客 4925

ROS机器人未知环境自主探索功能包explore_lite最全源码详细解析(二)

本系列文章主要针对ROS机器人常使用的未知环境自主探索功能包explore_lite展开全源码的详细解析,并进行概括总结。 本系列文章共包含六篇文章,前五篇文章主要介绍explore_lite功能包中 explore.cpp、costmap_tools.h、frontier_search.cpp、costmap_client.cpp等源码实现文件中全部函数的详细介绍,第六篇文章进行概括总结,包含自主探索功能包explore_lite的简介,实现未知环境自主探索功能的原理及流程总结,效果演示,使用功能包exp

慕羽★的博客 1648

.net4.0新特性

vs2010正式版4月12日发布了,有几个新特性分享一下……一、新关键词——dynamic 在新版本的C#中,dynamic关键词是一个很重要的新特性,现在你可以创建动态对象并在运行时再决定它的类型。而且.net 4.0为CLR加入了一组为动态语言服务的运行时环境,称为DLR(Dynamic Language Runtime动态语言运行时),这使得C#这种静态类型语言...

asmv2487的博客 160

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C# 方法的可选参数、命名参数

原文 http://www.cnblogs.com/lonelyxmas/admin/EditPosts.aspx?opt=1    C#方法的可选参数是.net 4.0最新提出的新的功能,对应简单的重载可以使用可选参数和命名参数混合的形式来定义方法;这样就可以很高效的提供代码的运行效率!          设计一个方法的参数的时,可为部分或全部参数分配默认值。调用其方法时,可以重新指定分配了...

weixin_33912453的博客 420

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C# 4.0新特性

<br />Microsoft Visual C# 3.0作为Visual Studio 2008的一部分发布以来已经快一年了。在VS Managed Languages团队,我们一直努力创建该语言的下一个版本(没什么惊喜,就是C# 4.0),而这个文档是我们现在所看到的、计划中的语言特性的第一个公开描述。<br />  请记住本文内容都是针对产品早期的,而且将来会改变。这么早地共享我们的计划,一部分原因是为了获取某些反馈,这些反馈会让我们在产品最终发布出来之前改进它。<br />  与该白皮书一同发布的还

刘跃飞的专栏 641

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

c# 4.0新特性一览

 回顾C#发展的历史,C#1.0完全是模仿Java,并保留了C/C++的一些特性如struct,新学者很容易上手;C#2.0加入了泛型,也与Java1.5的泛型如出一辙;C#3.0加入了一堆语法糖,并在没有修改CLR的情况下引入了Linq,简直是神来之笔,虽然很多项目出于各种各样如性能之类的原因没有采用,但非常适合小型程序的快速开发,减轻了程序员的工作量,也提高了代码的可读性;C#4.0增加了

3382

C# 4.0下的新特性

回顾C#发展的历史,C#1.0完全是模仿Java,并保留了C/C++的一些特性如struct,新学者很容易上手;C#2.0加入了泛型,也与Java1.5的泛型如出一辙;C#3.0加入了一堆语法糖,并在没有修改CLR的情况下引入了Linq,简直是神来之笔,虽然很多项目出于各种各样如性能之类的原因没有采用,但非常适合小型程序的快速开发,减轻了程序员的工作量,也提高了代码的可读性;C#4.0增加了动态语

Felomeng的技术博客 1618

C# 4 学习

14、Compressing Session Values ASP.NET session外的进程的状态值保存在数据库或服务器上。这些都是以序列化格式保存。发送到服务器时候,更多更大的session将消耗更多的资源 。现在,这些可以被压缩在一个新的构建compressionEnabled属性中。这种对sessionState元素属性,可以在web.config这样被声明。 ...

ailu6783的博客 166

C#历史回顾及C# 4.0新特性一览

本文对C#历史做了一番简单的回顾,并介绍了几个C# 4.0的新特性。C#4.0增加了动态语言的特性,从里面可以看到很多javascript、python这些动态语言的影子。

hhxx_cj的专栏 656

新书《C#4.0权威指南》接受预订了!

内容简介 《c# 4.0权威指南》由国内资深微软技术专家亲自执笔,微软技术开发者社区和技术专家联袂推荐。 内容新颖,基于最新的c# 4.0、net framework 4和visual studio 2010;写作方式有创新,用图解的方式对c#进行了完美的演绎;内容全面,不仅重点讲解了c# 4.0的所有新特性,而且对c#的所有知识点的原理、用法和要点都进行了全面的讲解和深度的分析,广度和深度完美结合。本书注重实践,包含大量有价值的示例代码,可操作性极强。 全书分为三个部分:准备篇首先对.net体系结构

未来之路 2017

C#4.0 中的新特性

转:http://msdn.microsoft.com/zh-cn/magazine/ff796223.aspx .NET Framework 4 中的新 C# 功能 Chris Burrows           C# 编程语言自 2002 年初次发布以来已经有了极大的改善,可以帮助程序员编写更清晰易懂、更容易维护的代码。这种改善来自于不断加入的新功能,例如泛型类型、可为空的值类型、l

jackljf的专栏 596

[Unity脚本运行时更新]C#4新特性

洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号。 本文是该系列《Unity脚本运行时更新带来了什么?》的第2篇。 洪流学堂公众号回复runtime,获取本系列所有文章。 Unity2017-2018.2中的4.x运行时已经支持到C#6,Unity2018.3将支持到C# 7.2,看看C#的新特性能给代码带来什么吧。 C#4 新特性 Named and optional argument...

大智_Unity探路者 947

C#高级编程学习笔记——.NET Framework4中的新特性

1、背景 .NET Framework第一版在2002年发布。.NET Framework 2.0 在2005年发布,可以认为是该架构的一个主要版本。对于.NET Framework的每个版本,Microsoft对所开的代码尽可能少的不兼容修改。 2、新增动态类型 动态语言(JavaScrip、Python和Ruby)进步非常快,由于这类编程越来越流行,C#发布了一个新的...

anvtncm8694的博客 252
上一篇: 【C#高阶编程核心】:为什么顶尖开发者都在用Lambda替代匿名方法?
下一篇: 揭秘PHP字符串搜索函数:strpos与stripos到底有什么不同?
InstrFun
博客等级 码龄1年 142粉丝 1990原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值