上海自适应网站建设/长春网站提升排名
C#是一种通用的,类型安全的面向对象编程语言。其目标是提高程序员生产力。
一.面向对象
C#实现了丰富的面向对象范式,包括封装、继承、多态。
C#面向对象特性包括:
统一的类型系统
类与接口
属性、方法、事件
C#支持纯函数模式
二、类型安全性
C#是一门类型安全的语言。例如:C#不允许将字符串类型作为整数类型处理。
C#支持类型静态化。能够在程序运行前排除大量错误。
C#允许使用dynamic关键字动态定义指定类型。然而C#在大多情况下仍然是一门静态语言。
C#还是一门强类型语言。
三、内存管理
C#依靠运行时来实现自动内存管理。公共语言运行时的垃圾回收器会作为程序的一部分运行。
C#并未抛弃指针,关键字unsafe的程序块显式内存分配。
四、平台支持
Linux、macOS、iOS、Android
五、CLR
公共语言运行时(Common Language Runtime,CLR),如自动化内存管理和异常处理。
C#也会将代码编译为托管代码。托管代码以中间语言(Intermediate Language,IL)的形式表示。CRL通常会在执行前,将IL转换为机器(如x84、x64)原生代码,称为即时(Just-In-Time)编译。
六、.NET Framework
.NET Framework是由CLR和大量的程序库组成。
七、其他框架
UWP
.Net Core
ASP.NET Core
Xamarin
八、简史
8.1C# 7.0新特性
8.1.1 数字字面的改进
下划线改善可读性:
int million = 1_000_000;
二进制字面量使用Ob前缀来标识:
int a = 0b1001_0000;
var b = 0b1001_0000;
8.1.2 输出变量及参数忽略
调用含有out参数的方法将更加容易:
bool successful = int.TryParse("123", out int result);
Console.WriteLine(result);
当调用含有多个out参数方法时,可以使用下划线字符_忽略你并不关心的参数:
方法
static void SimpleMethod(out int result,out int result2 ,out int result3)
{result = 1 + 1;result2 = 2 + 2;result3 = 3 + 3;
}
调用
SimpleMethod(out _, out _, out int result2);
8.1.3 模式
is运算符也可以自然的引入变量,称为模式变量
方法
static void SimpleMethod2(object x)
{if(x is string s){Console.WriteLine(s.Length);}
}
调用
SimpleMethod2("大家好呀");
同样 switch语句也同样支持模式。可以使用when子句来判断条件,或是直接选择null;
方法
static void SimpleMethod3(object? x){switch(x){case int i:Console.WriteLine("It is an int"); break;case string s:Console.WriteLine(s.Length);break;case bool b when b == true :Console.WriteLine("True");break;case null:Console.WriteLine("It is null");break;}}
调用
SimpleMethod3(12);
SimpleMethod3("12");
SimpleMethod3(true);
SimpleMethod3(null);
8.1.4 局部方法
局部方法是声明在其他函数内部的方法
static void WriteCubes()
{Console.WriteLine(Cubu(3));Console.WriteLine(Cubu(4));Console.WriteLine(Cubu(5));int Cubu(int value) => value * value * value;
}
8.1.5 更多的表达式体成员
C#6引入了以”胖箭头“语法表示的表达式的方法,只读属性、运算符以及索引器。而C#7更将其扩展到了构造函数、读/写属性和终结器中:
类:
public class Person : IAsyncDisposable{string? name;public Person(string? name) => Name = name;public string? Name{get => name;set => name = value ?? "";}public ValueTask DisposeAsync(){Console.WriteLine("Dispose");return ValueTask.CompletedTask;}}
方法:
static async void PersonDispose(){await AsyncPersonDispose();}static async Task AsyncPersonDispose(){await using (Person p = new Person("小米")){Console.WriteLine(p.Name);}}
8.1.6 解构器
C#7引入了结构器模式。构造器一般接受一系列(作为参数)并将其赋值给字段,而结构器则正相反,它将字段反向赋值给变量。
类
public class Dog{string? name;public Dog(string? name) => Name = name;public string? Name{get => name;set => name = value ?? "";}public void Deconstruct(out string firstName,out string lastName){int spacePos = name.IndexOf(' ');firstName = name.Substring(0, spacePos);lastName = name.Substring(spacePos + 1);}}
调用
var joe = new Dog("joe Bloggs");
var(first,last)=joe;
Console.WriteLine(first);
Console.WriteLine(last);
8.1.7 元组
C# 7 改进当属显示的元组(tuple)支持,元组提供了一系列相关值的简单方式:
var bob = ("Bob", 23);
Console.WriteLine(bob.Item1);
Console.WriteLine(bob.Item2);
C#的新元组实质上是使用了System.ValueTuple<…>泛型结构的语法糖。
我们还可以对元组的元素命名:
var tuple = (Name: "Bob", Age: 23);
Console.WriteLine(tuple.Name);
Console.WriteLine(tuple.Age);
有了元组函数再也不用通过一系列out参数来返回多个值了:
static (int row, int colum) GetFilePosition() => (3, 10);
var pos = GetFilePosition();
Console.WriteLine(pos.row);
Console.WriteLine(pos.colum);
元组隐式的支持解构模式
(int row,int column) = GetFilePosition();
Console.WriteLine(row);
Console.WriteLine(column);
8.1.7 thow表达式
现在它可以出现在表达式体函数中
public string Foo() => throw new NotImplementedException();
thow表达式也可以出现在三无判断运行符中:
方法
static string Capotalize(string? value) =>value == null ? throw new ArgumentException("Value") :value == "" ? "" :char.ToUpper(value[0]) + value.Substring(1);
调用
Console.WriteLine(Capotalize(null));
8.2 C# 6.0新特性
null条件(“Elvis”)运算符,可以避免在调用方法或访问类型的成员之前显式地编写用于null判断的语句。如下result将会为null而不会抛出NullReferenceException:
System.Text.StringBuilder sb = null;
string result = sb?.ToString();
lambda表达式
public int TimesTwo(int x) => x * 2;
public string someProperty => "Property value";
属性初始化器可以对自动属性进行初始赋值:
public DateTime TimeCreated { get; set; } = DateTime.Now;
这种初始化也支持只读属性:
public DateTime TimeCreated { get; } = DateTime.Now;
只读属性也可以在构造器中赋值。
索引初始化器可以一次性初始化具有索引器的任意类型:
var dict = new Dictionary<int, string>()
{[3] = "three",[20] = "ten"
};
字符串插值用更加简单的方式替代了string.Format:
string s = $"It is {DateTime.Now}";
Console.WriteLine(s);
异常过滤器,可以在catch上再加一个条件:
string html;
try
{html = new WebClient().DownloadString("http://asef");
}
catch(WebException ex) when(ex.Status == WebExceptionStatus.Timeout)
{}
using static 指令可以引入一个类型的所有静态成员,这样就可以不用写类型而直接使用这些成员:
using static System.Console;
WriteLine("Hello world");
nameof运算符返回变量、类型或者其他符号的名称,这样可以避免变量重命名造成不一致的代码:
int capacity = 123;
string x = nameof(capacity);
Console.WriteLine(x);
值得一提的是C# 6.0可以在catch和finally块中使用 await.
8.3 C# 5.0新特性
async和await,支持异步功能,有利于编写高并发和高效的I/O密集型应用程序。
8.4 C# 4.0新特性
1.动态绑定
2.可选参数和命名参数
3.用泛型接口和委托实现类型变化
4.改进COM互操作性
8.5 C# 3.0新特性
隐式局部变量、匿名类型、对象构造器、lambda表达式、扩展方法、查询表达式、表达式数。
8.5 C# 2.0新特性
泛型、可空类型、匿名方法、分部类、静态类
相关文章:

C#核心笔记——(一)C#和.NET Framework
C#是一种通用的,类型安全的面向对象编程语言。其目标是提高程序员生产力。 一.面向对象 C#实现了丰富的面向对象范式,包括封装、继承、多态。 C#面向对象特性包括: 统一的类型系统 类与接口 属性、方法、事件 C#支持纯函数模式 二、类型安…...

【2023年冬季】华为OD统一考试(B卷)题库清单(已收录345题),又快又全的 B 卷题库大整理
目录 专栏导读华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢? 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治递归…...

云服务器的先驱,亚马逊云科技海外云服务器领军者
随着第三次工业革命的发展,移动互联网技术带来的信息技术革命为我们的生活带来了极大的便捷。其中,不少优秀的云服务器产品发挥了不可低估的作用,你或许听说过亚马逊云科技、谷歌GCP、IBM Cloud等优秀的海外云服务器。那么云服务器有哪些&…...

QT webengine显示HTML简单示例
文章目录 参考示例1TestWebenqine.promainwindow.hmainwindow.cppmain.cpp效果 示例2 (使用setDevToolsPage函数)main.cpp效果 参考 QT webengine显示HTML简单示例 示例1 编译器 : Desktop Qt 5.15.2 MSVC2019 64bit编辑器: QtCreator代码: TestWebenqine.pro # TestWeben…...

Spark_SQL函数定义(定义UDF函数、使用窗口函数)
一、UDF函数定义 (1)函数定义 (2)Spark支持定义函数 (3)定义UDF函数 (4)定义返回Array类型的UDF (5)定义返回字典类型的UDF 二、窗口函数 (1&…...

【Leetcode】【每日一题】【中等】274. H 指数
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/h-index/description/?envTyped…...

MySQL读写分离技术及实现方案
MySQL读写分离技术及实现方案 本文主要介绍了MySQL读写分离技术的原理、实现方案以及示例。通过使用读写分离技术,可以提高数据库的性能,降低服务器的压力。 一、MySQL读写分离技术简介 读写分离是指将数据库的读操作和写操作分别分配到不同的服务器上…...

git 推送到github远程仓库细节处理(全网最良心)
我查看了很多网上的教程都不是很好 我们先在github创建一个仓库,且初始化 readme 我们到本地文件初始化仓库 添加远程仓库 这时候我们就 git add . , git commit ,再准备git push 的时候 显示没有指定远程的分支 我们按照提示操作 提示我们要先git pull 提示我…...

算法训练|数据流中的中位数
LCR 160. 数据流中的中位数 - 力扣(LeetCode) 总结:这题自己最开始的想法是直接使用vector容器,每次取中位数的时候就进行一次排序,超时。题解很巧妙的利用大根堆和小根堆来解决问题,大根堆和小根堆各存一…...

LeetCode 2558. 从数量最多的堆取走礼物【模拟,堆或原地堆化】简单
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

windows服务器环境下使用php调用com组件
Office设置 安装 office2013 且通过正版激活码激活 在组件服务 计算机 我的电脑 DOM 中找到 Microsoft Word 97 - 2003 文档 服务,右键属性 身份验证调整为 无 在 标识中 调整为 交互式用户 php环境设置 开启com组件扩展 在php.ini中设置 extensionphp_com_dotn…...

3DCAT+东风日产:共建线上个性化订车实时云渲染方案
近年来,随着5G网络和云计算技术的不断发展,交互式3D实时云看车正在成为一种新的看车方式。 与传统的到4S店实地考察不同,消费者可以足不出户,通过网络与终端设备即可实现全方位展示、自选汽车配色、模拟效果、快捷选车并进行个性…...

【VR开发】【Unity】【VRTK】1-无代码VRVR开发介绍
本篇开始精简讲解VRTK相关的知识。 VRTK是基于Unity的一套提供无代码VR开发的插件,这套插件开源,可商用,集合了目前可能的VR体验组件,可以让不会C#编程但想要开发VR体验的人在不写一行代码的前提下开发出心仪的VR作品。 这套组件问世后也很受欢迎,目前已经进化到了第四代…...

全国地级市最新城投债数据(2006-2023.2)
地级市-城投债数据是关于各地级市发行的城市投资建设项目资金债券的统计数据。这些数据对于研究者来说有着一定的参考价值。首先,地级市-城投债数据能够提供全国各地级市城投债发行的数量和规模情况,帮助研究者了解城市基础设施建设和经济发展的情况。其…...

vm_flutter
附件地址 https://buuoj.cn/match/matches/195/challenges#vm_flutter 可以在buu下载到。 flutter我也不会,只是这个题目加密算法全部在java层,其实就是一个异或和相加。 反编译 package k;import java.util.Stack;/* loaded from: classes.dex */ pu…...

MySQL数据库#6
Python操作mysql 在使用Python连接mysql之前我们需要先下载一个第三方的模块 pymysql的模块,导入后再进行操作。 操作步骤:1. 先连接mysql host,port,charset,username password 库,等等。 import pymysql…...

YOLO v1(2016.5)
文章目录 AbstractIntroduction过去方法存在的问题我们提出的方法解决了... Unified DetectionNetwork DesignTrainingInference Comparison to Other Detection SystemsDeformable parts modelsR-CNNOther Fast DetectorsDeep MultiBoxOverFeatMultiGrasp ExperimentsConclusi…...

SQL比较两次的字段集合,找出并返回差异,主要用于更新记录事件
Create PROCEDURE [dbo].[SysGetTableFieldsCompare] -- Description: <比较两次的字段集合,找出并返回差异,主要用于更新记录事件> -- Return 0- 成功, -1- 没有这个表 -- Rev: 1.00 -- FieldsSource Nvarchar(max) , FieldsTarg…...

muduo源码剖析之Acceptor监听类
简介 Acceptor类用于创建套接字,设置套接字选项,调用socket()->bind()->listen()->accept()函数,接受连接,然后调用TcpServer设置的connect事件的回调。 listen()//在TcpServer::start中调用 封装了一个listen fd相关…...

express session JWT JSON Web Token
了解 Session 认证的局限性 Session 认证机制需要配合 cookie 才能实现。由于 Cookie 默认不支持跨域访问,所以,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现跨域 Session 认证。 注意: 当前端…...

负载均衡策略 LVS
一、集群功能分类 1、LB (1) 概念: LB:负载均衡 (Load Balancing) 是一种分发网络流量的技术,LB 负载均衡的基本原理是将传入的网络流量分发到多个后端服务器,以确保这些服务器都承担相似的工作负载,从而避免某一台…...

驱动开发6 IO多路复用——epoll
核心操作:一棵树、一张表、三个接口 相关案例 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys…...

【python学习笔记——列表】
1、列表定义 列表是写在方括号 [] 之间、用逗号分隔开的元素列表。 空列表 list[]非空列表 列表定义时例如list[‘csdn’, ‘is’ ,‘good’ ,2023],直接给列表内赋值 2、列表索引规则 列表名[start:stop:step],前闭后开,即取索引为start…...

TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(一)
目录 前言1. YOLOv7-PTQ量化流程2. 准备工作3. 插入QDQ节点3.1 自动插入QDQ节点3.2 手动插入QDQ节点 前言 手写 AI 推出的全新 TensorRT 模型量化实战课程,链接。记录下个人学习笔记,仅供自己参考。 该实战课程主要基于手写 AI 的 Latte 老师所出的 Tens…...

[微信小程序踩坑]微信小程序editor富文本组件渲染字符串时,内部图片超出大小导致无法正常渲染或回显(数据传输长度为 3458 KB,存在有性能问题!)
坑一:回显问题 富文本组件: <editor id"editor" name"{{name}}" style"font-size: 28rpx;color: #C9CDD4" read-only"{{true}}" placeholder"{{placeholder}}" bind:input"onChange11"…...

USACO12OPEN Balanced Cow Subsets G(meet in the middle)
洛谷P3067 [USACO12OPEN] Balanced Cow Subsets G 题目大意 我们定义一个奶牛集合 S S S是平衡的,当且仅当满足以下两个条件: S S S非空 S S S可以被划分为两个集合 A , B A,B A,B,满足 A A A里的奶牛产量之和等于 B B B里的牛奶产量之和 …...

GIT常用操作记录
1、后悔药:强制回退到某个具体历史提交记录,并强制推送到远程仓库 强制回退到某个具体历史提交记录,即要删除它之后的所有提交,可以用 git reset 命令。 首先找到目标提交记录的ID,可以在github远程仓库的历史提交记…...

【ETL工具】Datax-ETL-SqlServerToHDFS
🦄 个人主页——🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!&…...

Kubernetes (K8S)概述
1、K8S 是什么? K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,不如整个缩写”。 1.1 作用 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。 可以…...

11月14号|Move生态Meetup相约浪漫土耳其
Move是基于Rust编程语言,由Mysten Labs联合创始人兼CTO Sam Blackshear在Meta的Libra项目中开发而来,旨在为开发者提供比现有区块链语言更通用的开发语言。Sam的目标是创建Web3的JavaScript,即一种跨平台语言,使开发人员能够在多个…...