我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#语言主要语言区域

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#语言主要语言区域

一、数组、集合和 LINQ

C# 和 .NET 提供了许多不同的集合类型。 数组包含由语言定义的语法。 泛型集合类型列在 System.Collections.Generic 命名空间中。 专用集合包括 System.Span<T> (用于访问堆栈帧上的连续内存),以及 System.Memory<T> (用于访问托管堆上的连续内存)。 所有集合(包括数组、Span<T> 和 Memory<T>)都遵循一种统一的迭代原则。 使用 System.Collections.Generic.IEnumerable<T> 接口。 这种统一的原则意味着任何集合类型都可以与 LINQ 查询或其他算法一起使用。 你可以使用 IEnumerable<T> 编写方法,这些算法适用于任何集合。

1、数组

数组是一种数据结构*_,其中包含许多通过计算索引访问的变量。 数组中的变量(亦称为数组的“元素”)均为同一种类型。 我们将这种类型称为数组的“元素类型”。

数组类型是引用类型,声明数组变量只是为引用数组实例预留空间。 实际的数组实例是在运行时使用 new 运算符动态创建而成。 new 运算指定了新数组实例的长度,然后在此实例的生存期内固定使用这个长度。 数组元素的索引介于 0 到 Length - 1 之间。 new 运算符自动将数组元素初始化为其默认值(例如,所有数值类型的默认值为 0,所有引用类型的默认值为 null)。

以下示例创建 int 元素数组,初始化此数组,然后打印此数组的内容。


int[] a = new int[10];
for (int i = 0; i < a.Length; i++)
{
    a[i] = i * i;
}
for (int i = 0; i < a.Length; i++)
{
    Console.WriteLine($"a[{i}] = {a[i]}");
}


此示例创建并在“一维数组”上进行操作。 C# 还支持多维数组。 数组类型的维数(亦称为数组类型的秩)是 1 与数组类型方括号内的逗号数量相加的结果。 以下示例分别分配一维、二维、三维数组。


int[] a1 = new int[10];
int[,] a2 = new int[10, 5];
int[,,] a3 = new int[10, 5, 2];


a1 数组包含 10 个元素,a2 数组包含 50 个元素 (10 × 5),a3 数组包含 100 个元素 (10 × 5 × 2)。 数组的元素类型可以是任意类型(包括数组类型)。 包含数组类型元素的数组有时称为“交错数组”,因为元素数组的长度不必全都一样。 以下示例分配由 int 数组构成的数组:


int[][] a = new int[3][];
a[0] = new int[10];
a[1] = new int[5];
a[2] = new int[20];


第一行创建包含三个元素的数组,每个元素都是 int[] 类型,并且初始值均为 null。 接下来的代码行将这三个元素初始化为引用长度不同的各个数组实例。

通过 new 运算符,可以使用“数组初始值设定项”(在分隔符 { 和 } 内编写的表达式列表)指定数组元素的初始值。 以下示例分配 int[],并将其初始化为包含三个元素。


int[] a = new int[] { 1, 2, 3 };


可从 { 和 } 内的表达式数量推断出数组的长度。 数组初始化可以进一步缩短,这样就不用重新声明数组类型了。


int[] a = { 1, 2, 3 };


以上两个示例等同于以下代码:


int[] t = new int[3];
t[0] = 1;
t[1] = 2;
t[2] = 3;
int[] a = t;


foreach 语句可用于枚举任何集合的元素。 以下代码从前一个示例中枚举数组:


foreach (int item in a)
{
    Console.WriteLine(item);
}


foreach 语句使用 IEnumerable<T> 接口,因此适用于任何集合。

二、字符串内插

C# 字符串内插使你能够通过定义表达式(其结果放置在格式字符串中)来设置字符串格式。 例如,以下示例从一组天气数据显示给定日期的温度:


Console.WriteLine($"The low and high temperature on {weatherData.Date:MM-DD-YYYY}");
Console.WriteLine($"    was {weatherData.LowTemp} and {weatherData.HighTemp}.");
// Output (similar to):
// The low and high temperature on 08-11-2020
//     was 5 and 30.


内插字符串通过 $ 标记来声明。 字符串插内插计算 { 和 } 之间的表达式,然后将结果转换为 string,并将括号内的文本替换为表达式的字符串结果。 第一个表达式 ({weatherData.Date:MM-DD-YYYY}) 中的 : 指定格式字符串。 在前一个示例中,这指定日期应以“MM-DD-YYYY”格式显示。

三、模式匹配

C# 语言提供模式匹配表达式来查询对象的状态并基于该状态执行代码。 你可以检查属性和字段的类型和值,以确定要执行的操作。 switch 表达式是模式匹配的主要表达式。

四、委托和 Lambda 表达式

委托类型表示对具有特定参数列表和返回类型的方法的引用。 通过委托,可以将方法视为可分配给变量并可作为参数传递的实体。 委托还类似于其他一些语言中存在的“函数指针”概念。 与函数指针不同,委托是面向对象且类型安全的。

下面的示例声明并使用 Function 委托类型:


delegate double Function(double x);

class Multiplier
{
    double _factor;

    public Multiplier(double factor) => _factor = factor;

    public double Multiply(double x) => x * _factor;
}

class DelegateExample
{
    static double[] Apply(double[] a, Function f)
    {
        var result = new double[a.Length];
        for (int i = 0; i < a.Length; i++) result[i] = f(a[i]);
        return result;
    }

    public static void Main()
    {
        double[] a = { 0.0, 0.5, 1.0 };
        double[] squares = Apply(a, (x) => x * x);
        double[] sines = Apply(a, Math.Sin);
        Multiplier m = new(2.0);
        double[] doubles = Apply(a, m.Multiply);
    }
}

Function 委托类型实例可以引用需要使用 double 自变量并返回 double 值的方法。 Apply 方法将给定的 Function 应用于 double[] 的元素,从而返回包含结果的 double[]。 在 Main 方法中,Apply 用于向 double[] 应用三个不同的函数。

委托可以引用静态方法(如上面示例中的 Square 或 Math.Sin)或实例方法(如上面示例中的 m.Multiply)。 引用实例方法的委托还会引用特定对象,通过委托调用实例方法时,该对象会变成调用中的 this。

还可以使用匿名函数或 Lambda 表达式创建委托,这些函数是在声明时创建的“内联方法”。 匿名函数可以查看周围方法的局部变量。

 以下示例不创建类:


double[] doubles = Apply(a, (double x) => x * 2.0);


委托不知道或不在意其所引用的方法的类。 引用的方法必须具有与委托相同的参数和返回类型。

五、async/await

C# 支持含两个关键字的异步程序:async 和 await。 将 async 修饰符添加到方法声明中,以声明这是异步方法。 await 运算符通知编译器异步等待结果完成。 控件返回给调用方,该方法返回一个管理异步工作状态的结构。 结构通常是 System.Threading.Tasks.Task<TResult>,但可以是任何支持 awaiter 模式的类型。 这些功能使你能够编写这样的代码:以其同步对应项的形式读取,但以异步方式执行。 例如,以下代码会下载 Microsoft Docs 的主页:


public async Task<int> RetrieveDocsHomePage()
{
    var client = new HttpClient();
    byte[] content = await client.GetByteArrayAsync("https://docs.microsoft.com/");

    Console.WriteLine($"{nameof(RetrieveDocsHomePage)}: Finished downloading.");
    return content.Length;
}


这一小型示例显示了异步编程的主要功能:

  • 方法声明包含 async 修饰符。
  • 方法 await 的主体是 GetByteArrayAsync 方法的返回。
  • return 语句中指定的类型与方法的 Task<T> 声明中的类型参数匹配。 (返回 Task 的方法将使用不带任何参数的 return 语句)。

六、属性

C# 程序中的类型、成员和其他实体支持使用修饰符来控制其行为的某些方面。 例如,方法的可访问性是由 publicprotectedinternal private 修饰符控制。 C# 整合了这种能力,以便可以将用户定义类型的声明性信息附加到程序实体,并在运行时检索此类信息。 程序通过定义和使用特性来指定此声明性信息。

以下示例声明了 HelpAttribute 特性,可将其附加到程序实体,以提供指向关联文档的链接。


public class HelpAttribute : Attribute
{
    string _url;
    string _topic;

    public HelpAttribute(string url) => _url = url;

    public string Url => _url;

    public string Topic
    {
        get => _topic;
        set => _topic = value;
    }
}


所有特性类都派生自 .NET 库提供的 Attribute 基类。 特性的应用方式为,在相关声明前的方括号内指定特性的名称以及任意自变量。 如果特性的名称以 Attribute 结尾,那么可以在引用特性时省略这部分名称。 例如,可按如下方法使用 HelpAttribute


[Help("https://docs.microsoft.com/dotnet/csharp/tour-of-csharp/features")]
public class Widget
{
    [Help("https://docs.microsoft.com/dotnet/csharp/tour-of-csharp/features",
    Topic = "Display")]
    public void Display(string text) { }
}


此示例将 HelpAttribute 附加到 Widget 类。 还向此类中的 Display 方法附加了另一个 HelpAttribute。 特性类的公共构造函数控制了将特性附加到程序实体时必须提供的信息。 可以通过引用特性类的公共读写属性(如上面示例对 Topic 属性的引用),提供其他信息。

可以在运行时使用反射来读取和操纵特性定义的元数据。 如果使用这种方法请求获取特定特性,便会调用特性类的构造函数(在程序源中提供信息)。 返回生成的特性实例。 如果是通过属性提供其他信息,那么在特性实例返回前,这些属性会设置为给定值。

下面的代码示例展示了如何获取与 Widget 类及其 Display 方法相关联的 HelpAttribute 实例。


Type widgetType = typeof(Widget);

object[] widgetClassAttributes = widgetType.GetCustomAttributes(typeof(HelpAttribute), false);

if (widgetClassAttributes.Length > 0)
{
    HelpAttribute attr = (HelpAttribute)widgetClassAttributes[0];
    Console.WriteLine($"Widget class help URL : {attr.Url} - Related topic : {attr.Topic}");
}

System.Reflection.MethodInfo displayMethod = widgetType.GetMethod(nameof(Widget.Display));

object[] displayMethodAttributes = displayMethod.GetCustomAttributes(typeof(HelpAttribute), false);

if (displayMethodAttributes.Length > 0)
{
    HelpAttribute attr = (HelpAttribute)displayMethodAttributes[0];
    Console.WriteLine($"Display method help URL : {attr.Url} - Related topic : {attr.Topic}");
}

到此这篇关于C#语言主要语言区域的文章就介绍到这了,更多相关主要语言区域内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#语言主要语言区域

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#中主要语言区域有哪些

这篇文章给大家分享的是有关C#中主要语言区域有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、数组、集合和 LINQC# 和 .NET 提供了许多不同的集合类型。 数组包含由语言定义的语法。 泛型集合类型列
2023-06-22

c语言和python区别主要用来写什么

c语言和python是两门截然不同的编程语言,它们在语法、设计理念、性能和应用领域方面都有显著差异。c语言是一种过程式语言,以其简洁、高效的特性而闻名,主要用于底层系统编程和性能要求较高的场景。python是一种解释型语言,语法清晰简洁,易
c语言和python区别主要用来写什么
2024-03-14

Go语言的主要编写语言是什么?

学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《Go语言的主要编写语言是什么?》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!标题:Go语言的核心
Go语言的主要编写语言是什么?
2024-04-04

c#语言主要用于开发什么

c#语言主要用于开发桌面应用程序、web应用程序、移动应用程序、游戏、云计算以及其他用途,例如数据处理、科学计算和物联网。C#语言主要用于开发什么?C#(发音为“C sharp”)是一种面向对象的、高层次的编程语言,由微软公司开发,主要用
c#语言主要用于开发什么
2024-04-04

c语言与go语言的区别有哪些

小编给大家分享一下c语言与go语言的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!区别:1、C语言源文件的扩展名是“.h”和“.c”,Go语言源文件的扩展名是“.go”。2、C语言中通过文件来管理代码,Go语言中
2023-06-06

c++和c语言的区别

区别:1、c++支持类、继承、多态等oop概念,而c语言本身并不直接支持oop;2、c++相对于c语言来说,引入了更多的新特性,例如函数重载、运算符重载、模板、异常处理等;3、c++标准库提供了丰富的功能,而c语言的标准库相对较小,功能较为
c++和c语言的区别
2024-03-14

C++语言与其他语言有什么区别

本篇内容主要讲解“C++语言与其他语言有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++语言与其他语言有什么区别”吧!本文着重进行对C++语言来说,在语法上要简单得多,因此初学者很容
2023-06-17

Java、C、PHP、Python语言主要有什么用

这篇文章给大家分享的是有关Java、C、PHP、Python语言主要有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、Javajava常常跟”企业”联系在一起, 因为具备一些很好的语言特性, 以及丰富的框
2023-06-04

c语言和python区别

c语言和python是两种截然不同的编程语言,各具特色和应用场景。c语言作为编译型、面向过程的语言,在底层系统编程和性能要求高的领域表现出色。python作为解释型、面向对象的语言,凭借简洁易懂的语法和丰富的库,在数据分析、人工智能和web
c语言和python区别
2024-03-14

c语言位域怎么用

c 语言位域位域是一种数据类型,允许将数据存储在单个字节或单词的特定位集合中。它使用一个结构来定义位域,其中每个位域成员都有一个特定的偏移量和大小。使用位域的步骤:定义结构:使用 struct 关键字定义一个结构体。使用 bit-fi
c语言位域怎么用
2024-05-21

汇编语言和c语言的区别有哪些

本文小编为大家详细介绍“汇编语言和c语言的区别有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“汇编语言和c语言的区别有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。区别:1、因为汇编语言实质上是机器语言
2023-07-04

汇编语言和c语言的区别是什么

区别:1、因为汇编语言实质上是机器语言的助记符,是直接面对CPU的语言,所以汇编语言的运行效率比C语言高;2、汇编语言对硬件的可操控性强,C语言硬件可操控性比较差;3、汇编语言的目标代码体积小,C语言目标代码体积大;4、汇编语言不易维护,C语言容易维护;5、汇编语言可移植性很差,C语言可移植性很好;6、汇编语言比C语言能学,因为汇编语言所需要的编绘知识很多也很复杂。
2023-05-14

Go语言在云计算领域的主要应用

go语言在云计算领域的应用主要包括:微服务和函数式编程:适合处理大量并发请求。kubernetes编排:可以编写操作符和自定义资源,扩展和自动化kubernetes集群管理。云基础设施工具:用于创建高性能、可靠的资源管理、日志记录和监控服务
Go语言在云计算领域的主要应用
2024-04-03

c#和c语言区别大吗?

c# 和 c 语言之间存在显着差异:语法不同、类型系统不同、内存管理方式不同、平台支持不同、运行时环境不同、编程范式不同、应用范围不同。因此,不能说 c# 和 c 语言区别很小。C# 和 C 语言的区别C# 和 C 语言虽然都属于计算机编
c#和c语言区别大吗?
2024-04-04

c语言和c++怎么区别

c++kquote>c语言和c++的主要区别在于:对象导向编程:c++支持,c不支持。数据类型:c++引入了bool、string、vector等新类型。指针:c使用直接指针,c++使用引用。内存管理:c手动管理,c++自动管理。输入/输出
c语言和c++怎么区别
2024-04-05

c语言是什么语言

c语言作为一种通用、过程式编程语言,自诞生以来一直是计算机领域最流行的语言之一。其简洁高效、跨平台、强大的控制能力、丰富的库函数和可扩展性等特点,使其广泛应用于系统软件开发、嵌入式系统开发、游戏开发、网络编程等多个领域。通过学习c语言,可以
c语言是什么语言
2024-03-14

c语言和c++有区别吗?

c++kquote>是的,c 语言和 c++ 之间存在关键区别:c++ 支持面向对象的类和对象,而 c 则不支持。c++ 具有严格的数据封装和访问控制,而 c 没有。c++ 具有命名空间,而 c 没有。c++ 支持泛型编程,而 c 不支持。
c语言和c++有区别吗?
2024-04-13

Go语言和C语言指针区别对比分析

Go语言和C语言是两种常用的编程语言,它们在指针的使用上有着一定的区别。本文将通过具体的对比分析以及代码示例来说明Go语言和C语言中指针的区别。一、概述指针是一种用来存储变量地址的特殊数据类型,它可以被用于直接访问内存中的数据。C语言是一
Go语言和C语言指针区别对比分析
2024-03-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录