掌握一门语言,当然要掌握它的特性,而随着C#历代版本的迭代更替,C#语言也日趋完善,在C#2.0~C#4.0版本所带来的新的语法特性格外重要。C#的新特性,其本质都是“语法糖”,目的是提升开发效率,在编译时会被编译器转成原始语法。下面按照版本顺序依次介绍其中在日常开发中比较常用的部分。 C# 1.0 特性 第1个版本,编程语言最基础的特性。 Classes:面向对象特性,支持类类型 Structs:结构 Interfaces:接口 Events:事件 Properties:属性,类的成员,提供访问字段
LINQ简称语言集成查询,设计的目的是为了解决在.NET平台上进行统一的数据查询。
查看公司项目代码时,存在这样一个问题:winform界面上有很多信息填写,提交后台服务器更新,但数据的合法验证及值的转换却不太敢恭维,一堆的if判断和转换,便想着是否能扩展个方法出来,琢磨出个思路,记录下来与大家共同探讨,有不对的地方还请大家指正。
通过一个相对较小的版本,C# 7.3解决了一些自C# 1和2以来长期悬而未决的问题。 重载解析 从C# 1.0开始,重载解析规则的设计就相当有问题。在某些情况下,它会选两个或更多方法作为候选,虽然所有这些方法中只有一个会被使用。根据这些错误选出的方法的优先级,编辑器要么会报没有匹配的方法,要么会报匹配不明确。 C# 7.3把其中部分检查移到了重载解析期间,而不是重载解析之后,这样,错误的匹配就不会导致编译器错误。改进后的重载候选提案概括了这些检查: 当一个方法组既包含实例又包含静态成员时,如果调用时没有实
C# 7.3 版本有两个主要主题。 第一个主题提供使安全代码的性能与不安全代码的性能一样好的功能。 第二个主题提供对现有功能的增量改进。 此外,在此版本中添加了新的编译器选项。
肉夹馍(https://github.com/inversionhourglass/Rougamo)通过静态代码织入方式实现AOP的组件,其主要特点是在编译时完成AOP代码织入,相比动态代理可以减少应用启动的初始化时间让服务更快可用,同时还能对静态方法进行AOP。
C# 1.0 版 回想起来,C# 1.0 版非常像 Java。 在 ECMA 制定的设计目标中,它旨在成为一种“简单、现代、面向对象的常规用途语言”。 当时,它和 Java 类似,说明已经实现了上述早
使用泛型(generic),可以编写在编译时类型安全的通用代码,无须事先知道要使用的具体类型,即可在不同位置表示相同类型。在引入之初,泛型主要用于集合。如今,泛型已经广泛应用于C#的各个领域,其中用得较多的有如下几项:
第一章 单项选择题 第1题 C#程序的执行过程是( ) 从程序的Main方法开始,到最后一个方法结束 (答案) 从程序的第一个方法开始,到最后一个方法结束 从程序的Main方法开始,到Main方法结束 从程序的第一个方法开始,到Main方法结束 得分: 0.0 /10.0 第2题 C#语言源代码文件的后缀名为( )。 .csP .cs (答案) .C .C# 得分: 10.0 /10.0 第3题 下面对Write()和WriteLine()方法的描述,( )是正确的。 WriteLine()方法在输出字符串的后面添加换行符 (答案) 使用Write()和WriteLine()方法输出数值变量时,必须要先把数值变量转换成字符串 使用不带参数的WriteLine()方法时,将不会产生任何输出 使用Write()输出字符串时,光标将会位于字符串的下一行 得分: 10.0 /10.0 第4题 C#语言经编译后得到的是( )。 机器指令 Microsoft中间语言指令 (答案) 本机指令 汇编指令 得分: 10.0 /10.0 第5题 C#中导入某一命名空间的关键字是( )。 include import using (答案) use 得分: 10.0 /10.0 第6题 在C#中不可作为注释的选项是( ) ‘ (答案) /// /和/ // 得分: 10.0 /10.0 第7题 Console标准的输入设备是( )。 打印机 屏幕 键盘 (答案) 鼠标 得分: 10.0 /10.0 第8题 下面对Read()和ReadLine()方法的描述,( )是错误的。 ReadLine()方法读取的字符不包含回车和换行符 使用Read()方法读取的字符包含回车和换行符 (答案) 只有当用户按下Enter键时,Read()和ReadLine()方法才会返回 Read()方法一次只能从输入流中读取一个字符 得分: 0.0 /10.0 第9题 CLR是一种( )。 API编程接口 开发环境 运行环境 (答案) 程序设计语言 得分: 10.0 /10.0 第10题 下列( )选项不是.NET框架可以创建的应用程序类型。 Windows应用 Web服务 控制台应用 MIS系统 (答案)
C# 9.0 引入了Record类型,这是一种引用类型,它提供合成方法来提供值语义,从而实现相等性。 默认情况下,记录是不可变的。
泛型并不是C#语言一开始就带有的特性,而是在FCL2.0之后实现的新功能。基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用。同时,它减少了泛型类及泛型方法中的转型,确保了类型安全。委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,它是对方法的引用。事件本身也是委托,它是委托组,C#中提供了关键字event来对事件进行特别区分。一旦我们开始编写稍微复杂的C#代码,就肯定离不开泛型、委托和事件。本章将针对这三个方面进行说明。
C# 9.0 引入了记录类型,这是一种引用类型,它提供合成方法来提供值语义,从而实现相等性。 默认情况下,记录是不可变的。
Razor 是一个用于将基于服务器的代码嵌入到网页中的标记语法。 Razor语法由 Razor 标记、c # 和 HTML 组成。 通常包含 Razor 的文件的扩展名 cshtml
反射(Reflection)是C#语言中一种非常有用的机制,它可以在运行时动态获取对象的类型信息并且进行相应的操作。反射是一种在.NET Framework中广泛使用的技术,它是实现上述特性的基础,非常重要。
面对事件处理,我们通常会通过定义某一个通用接口,在该接口中定义方法,然后在框架代码中,调用实现该接口的类实例的方法来实现函数的回调。可能这样来说有些抽象,那我们提供一个具体的情形来实现这一情形。
基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用。同时,它减少了泛型类及泛型方法中的转型,确保了类型安全。委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,它是对方法的引用。事件本身也是委托,它是委托组,C#中提供了关键字event来对事件进行特别区分。
.NET一般指 .NET FrameWork框架,它是一种平台,一种技术。理论上,各种语言都可以编译成它的IL,在上面运行。.NET开发,就是把它当作目标平台的开发。
一、前言 还记得JDK1.4时遍历列表的辛酸吗?我可是记忆犹新啊,那时因项目需求我从C#转身到Java的怀抱,然后因JDK1.4少了泛型这样语法糖(还有自动装箱、拆箱),让我受尽苦头啊,不过也反映自己的水平还有待提高,呵呵。JDK1.5引入了泛型、自动装箱拆箱等特性,C#到Java的过渡就流畅了不少。下面我们先重温两者非泛型和泛型的区别吧! // 非泛型遍历列表 List lst = new ArrayList(); lst.add(1); lst
在写这篇文章的时候,C# 已经有了 17 年的历史了,可以肯定地说它并没有去任何地方。C# 语言团队不断致力于开发新特性,改善开发人员的体验。
我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类型不同。有没有一种办法,在方法中传入通用的数据类型,这样不就可以合并代码了吗?泛型的出现就是专门解决这个问题的。读完本篇文章,你会对泛型有更深的了解。
官方文档:https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2010/ms173171(v=vs.100)
上期主要分享了 From Java To Kotlin 1 :空安全、扩展、函数、Lambda。
我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类型不同。有没有一种办法,在方法中传入通用的数据类型,这样不就可以合并代码了吗?泛型的出现就是专门解决这个问题的。读完本篇文章,你会对泛型有更深的了解。 为什么要使用泛型 为了了解这个问题,我们先看下面的代码,代码省略了一些内容,但功能是实现一个栈,这个栈只能处理int数据类型: public class S
Java多线程是指在同一时间内,多个线程同时执行,从而提高程序的执行效率。以下是Java多线程的一些基本知识:
2.隐藏方法:如果想在派生类中定义一个和基类中重名的方法,但是实现过程不一样,这中操作叫隐藏方法。
高级面向对象编程是在基础面向对象编程的基础上进一步深入和拓展的一种编程范式。它强调封装、继承和多态的概念,并引入了泛型编程和集合类型等高级特性。高级面向对象编程提供了更灵活、可扩展和可复用的代码结构,能够帮助开发者构建更复杂、更高效的应用程序。高级面向对象编程中,泛型编程使得代码可以更加通用和灵活,能够处理不同类型的数据而无需重复编写相似的代码。集合类型则提供了丰富的数据结构和算法,使得数据的管理和操作更加便捷和高效。 通过深入理解和应用高级面向对象编程的概念和特性,开发者可以设计出更可靠、可维护和可扩展的软件系统。这种编程范式在现代软件开发中扮演着重要的角色,为开发者提供了强大的工具和思维方式,能够更好地满足不断变化的需求和挑战。
本号已有原创文章250+篇,以软件工程为纲,DevOps为基,洞察研发效能全貌,涵盖从需求管理、应用开发、软件测试、发布部署到运营监控的完整流程。无论您是项目经理、产品经理、开发人员、测试人员,还是运维人员,在这里您都可以有所收获,同时深入理解其他角色的工作内容,共同助力DevOps的成功落地。欢迎关注,有任何问题可发送私信~
C#(读作C Sharp)是一种通用、面向对象的编程语言,由微软公司于2000年推出。它在设计之初的目标是为了在.NET平台上开发应用程序,并且它也成为了.NET开发的主要语言之一。C#的历史和产生背景紧密联系着微软公司对软件开发工具和平台的发展。 在20世纪90年代,微软推出了一系列的开发工具和平台,其中最重要的是Visual Basic和C++。然而,随着互联网的普及和软件复杂性的增加,开发者需要一种更强大、更现代化的语言来应对新的挑战。因此,微软开始研发一种新的语言,旨在提供更好的生产力、更强大的面向对象支持和更高的性能。 C#的设计灵感来自于多个编程语言,包括C++、Java和Delphi等。它汲取了这些语言的优点,并融入了自己的特色和创新。C#于2000年首次发布,作为.NET Framework的一部分。它引入了许多创新的语言特性,如委托、属性、泛型和LINQ等,以提供更强大的编程模型和更简洁的代码。 C#的重要性和广泛应用主要体现在以下几个方面:
开篇:在上一篇中,我们了解了匿名类、匿名方法与扩展方法等所谓的新语法,这一篇我们继续征程,看看系统预定义委托(Action/Func/Predicate)和超爱的Lambda表达式。为了方便码农们,.Net基类库针对实际开发中最常用的情形提供了几个预定义好的委托,这些委托可以直接使用,无需再重头定义一个自己的委托类型。预定义委托在.Net基类库中使用的比较广泛,比如在Lambda表达式和并行计算中都大量地使用,需要我们予以关注起来!
在Thinking in java 第五版的第二十章中,开篇说到,在普通的类和方法中只能用特定的类型:基本数据类型和类类型。如果在编写代码的过程中需要用到多种类型,那么这种严苛就会对代码的束缚很大。如下代码:
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/52230558
泛型是jdk5引入的类型机制,就是将类型参数化,它是早在1999年就制定的jsr14的实现。
这段代码使用Linq对List列表进行筛选、分组、排序等一系列操作展示了Linq的强大和便捷,那么我们为什么需要学习Linq?可以看到这样一堆逻辑只几行Linq很快就可以实现,如果要我们自己实现方法去处理这个List肯定是比较繁琐的。 Linq是什么?如下是官方文档对于Linq的描述:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默。我眼中的程序员大多都不爱说话,默默承受着编程的巨大压力,除了技术上的交流外,他们不愿意也不擅长和别人交流,更不乐意任何人走进他们的内心!
大家好,我是麦洛,今天来复习一下泛型。JDK 5.0 引入了 Java 泛型,允许设计者详细地描述变量和方法的类型要如何变化,使得代码具有更好的可读性。本文章是对 Java 中泛型的快速介绍,包含泛型背后的目标以及使用泛型如何提高我们代码的质量。
在开发编程中,我们经常会遇到功能非常相似的功能模块,只是他们的处理的数据不一样,所以我们会分别采用多个方法来处理不同的数据类型。但是这个时候,我们就会想一个问题,有没有办法实现利用同一个方法来传递不同种类型的参数呢?
我们在之前的博客文章中介绍了高兼容性、高稳定性的实时热更新解决方案Robust之后,业内反响强烈,不断有读者咨询我们什么时候开源。今天我们非常高兴地宣布,Robust已经开源啦!开源地址:https://github.com/Meituan-Dianping/Robust 。 Robust热更新系统借鉴Instant Run原理,实现了一个兼容性更强而且实时生效的热更新方案。其基本思路是,Robust热更新系统在一个方法的入口处插入一段跳转代码,当发现某个方法出现bug就跳转执行补丁中的代码,略过原有代码的
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用。“ - Jon Skeet
ref 关键字会导致参数通过引用传递,而不是通过值传递。 通过引用传递的效果是,对所调用方法中的参数进行的任何更改都反映在调用方法中。 例如,如果调用方传递本地变量表达式或数组元素访问表达式,所调用方法会将对象替换为 ref 参数引用的对象,然后调用方的本地变量或数组元素将开始引用新对象。
反射和动态编程为开发人员提供了一组强大的工具,可以应对多样化的编程需求,提高代码的灵活性和可维护性。然而,应谨慎使用它们,以确保代码的安全性和性能。
周末空闲,选读了一下一本很不错的C#语言使用的书,特此记载下便于对项目代码进行重构和优化时查看。 Standing On Shoulders of Giants,附上思维导图,其中标记的颜色越深表示
样例类是一种特殊类,它可以用来快速定义一个用于保存数据的类(类似于Java POJO类),在后续要学习并发编程和spark、flink这些框架也都会经常使用它。
这些题目确实不怎么经常使用,因此在后文中,我会提一组我的私房经典“ 6k面试题”,供大家轻松一刻使用。
Osborn:关于增加的匿名方法有什么特点吗?我记得当匿名方法刚被人介绍出来的时候,我和其作者聊过,他说你不得不在语言中支持这样的功能,但是为什么要这么做,却说不出个所以然来。我肯定匿名方法有他的实际用处,看我们这篇报道的人也有同样的问题吧。尽管如此,在C# 3.0中支持匿名方法的特色,和泛型一样,还是很吸引人的。
也就是说,在声明一个变量(并且同时给它赋值)的时候,完全不用指定变量的类型,只要一个var就解决问题了
委托是一种定义方法签名的类型,可以与具有兼容签名的任何方法关联。你可以通过委托调用方法。委托用于将方法参数传递给其它方法。事件处理程序就是通过委托调用的方法(这是MSDN中对委托的解释)。个人感觉C#中委托类似于C++中的函数指针,但委托又是一种特殊的类,只有方法的类。
领取专属 10元无门槛券
手把手带您无忧上云