目录

什么是 .NET 类库?

甚至数据类型也是 .NET 类库的一部分

什么是命名空间?

调用 .NET 类库中不同种类的方法

如何调用 .NET 类库中的方法

调用 .NET 类库中不同种类的方法

有状态方法与无状态方法

创建类的实例

为什么 Next() 方法是有状态的?

如何确定是否需要先创建类的实例,然后再调用其方法?

处理返回值和输入参数

返回值

输入参数

重载的方法

使用 IntelliSense


除了 C# 语言本身,还需要其他项才能构建应用程序。 还需要 .NET 运行时,用于在最终用户的计算机上执行代码时托管并管理代码。 还依赖于可在应用程序中使用的称为 .NET 类库的功能集合。

什么是 .NET 类库?

.Net 类库是包含成千上万个方法的数以千计的类的集合。 这些方法由 Microsoft 创建,并可在应用程序中使用。

类只是一种用于包含方法的容器。 开发者通常将相关方法保留在一个类中。 例如,可从命令行窗口发送或接收信息的任何方法都会被收集到 .NET 类库的 System.Console 类中。

在许多情况下,可使用这些类和方法构建特定类型的应用程序。 例如,可使用包含类和方法的一个较大子集创建动态 Web 应用程序。 还存在好几个系列的类,使你能够构建本机桌面应用程序。 可使用另一个类和方法的子集访问数据库。

还有其他一些类,其方法本质上更适用于常规用途。 换言之,其实用工具跨不同的框架。 如果希望读取或写入文件、执行三角函数或微积分操作、进行调用以从 Internet 中检索数据,无论是要构建 Web、桌面、移动还是要构建云应用程序,都可使用这些类及其方法。

正如你可以想象的,为应用程序提供大量功能库可为软件开发者节省大量时间。 如果必须从头开始创建每个要生成的新应用程序,该怎么办?

甚至数据类型也是 .NET 类库的一部分

你已了解的 C# 数据类型实际上也是 .NET 类库的组成部分。 为简化我们的工作,C# 掩盖了我们使用的数据类型的真实标识。 但在幕后,数据类型的实现方式与 .NET 类库中每个其他的类都一样。 这也意味着一些有用的方法是内置的,并可用于变量。

什么是命名空间?

可将命名空间视为类型的“姓氏”。 类包含实现类型的代码。 类被组织成不同的命名空间,以防发生命名冲突。 毕竟,拥有上千个类时,可能需要重复使用类名。 命名空间有助于确保任何两个类中不具有相同的全名。

调用 .NET 类库中不同种类的方法

如何调用 .NET 类库中的方法

通过调用 Console.WriteLine() 方法的经验,应已了解基本知识:

  • 首先键入类名称 Console
  • 添加成员访问运算符,即 . 符号
  • 添加方法的名称 WriteLine
  • 添加方法调用运算符,该运算符是一组括号 ()
  • 最后,在左括号和右括号(如 "Hello World!")之间添加需要 Console.WriteLine() 方法打印为输入参数的值

虽然某些方法的调用方式与 Console.WriteLine() 的调用方式相同,但 .NET 类库中还有一些方法需要使用其他调用方式。

调用 .NET 类库中不同种类的方法

下面的示例通过生成随机数字并将其打印到控制台来模拟掷骰子。

Random dice = new Random();
int roll = dice.Next(1, 7);
Console.WriteLine(roll);

如果多次运行代码,控制台输出中将显示介于 1 到 6 之间的数字。

首先,让我们来逐步介绍每个代码行完成的任务,然后我们会提出一些重要问题,并介绍如何使用 .NET 类库中的类和方法。

第一个代码行创建 .NET 类库中 System.Random 类的新实例,并将对新对象的引用存储在名为 dice的变量中。

第二个代码行调用 dice对象的 Next() 方法,传入两个参数:随机数字的最小值和最大值。 Next() 方法返回值,我们将其保存到名为 roll 的变量中。

第三个代码行调用 WriteLine() 方法,将 roll的值打印到控制台。

在此代码示例中,我们将调用 Random 类和 Console 类的方法。 但是,这些方法的调用方式不同。 使用不同技术调用这些方法的原因是,有些方法是有状态的,而有些方法是无状态的。

有状态方法与无状态方法

在计算中,“状态”用于描述特定时刻下执行环境的状况。 代码逐行执行时,值存储在变量中。 在执行过程中的任何时候,应用程序的当前状态为存储在内存中的所有值的集合。

某些方法的正常工作不依赖于应用程序的当前状态。 换言之,实现 无状态方法 是为了在不引用或更改内存中存储的任何值的情况下正常工作。 无状态方法也称为 静态方法

例如,Console.WriteLine() 方法不依赖于内存中存储的任何值。 该方法执行其函数并完成工作,而不会以任何方式影响应用程序的状态。

但是,其他方法必须有权访问应用程序的状态,才能正常工作。 换言之,有状态方法是依赖于由以前的已执行代码行存储在内存中的值构建的。 或者,有状态方法通过更新值或将新值存储在内存中来修改应用程序的状态。 它们也称为 实例方法

有状态(实例)方法在字段中跟踪方法的状态,这些字段是在类上定义的变量。 对于存储状态的这些字段,类的每个新实例都将获取其自己的副本。

单个类可支持有状态方法和无状态方法。 但是,需要调用有状态方法时,必须首先创建类的实例,这样方法才能访问状态。

创建类的实例

类的实例称为 对象 。 若要创建类的新实例,请使用 new 运算符。 请考虑下面这一代码行,此代码行可创建 Random 类的新实例,以此创建名为 dice 的新对象:

Random dice = new Random();

new 运算符执行以下几项重要操作:

  • 首先请求足够大的计算机内存地址,用于存储基于 Random 类的新对象。
  • 创建新的对象,并将其存储在内存地址上。
  • 返回内存地址,使其保存在 dice 变量中。

从此时起,引用 dice 变量时,.NET 运行时在幕后执行查找操作,这会造成一种直接使用对象本身的假象。

为什么 Next() 方法是有状态的?

你可能想知道为什么 Next() 方法以有状态方法实现? .NET 类库设计器无法找出在无需状态的情况下生成随机数字的方法吗? 而且 Next() 方法存储或引用的内容究竟是什么?

这些都是合理的问题。 在较高的级别上,计算机擅长按照特定指令来创建可靠且可重复的结果。 为了创建随机错觉,Next() 方法的开发者决定将日期和时间具体捕获到毫秒的小数部分,并用它来设置一种算法,使其每次都会生成不同数字。 虽然并非完全随机,但可满足大多数应用程序。 在 dice 对象的生存期内捕获和维护的状态是种子值。 后续每次对 Next() 方法的调用都将重新运行该算法,但需确保种子发生更改,这样才不会返回相同的值。

但是,使用 Random.Next() 方法不必了解其 工作原理。 但需要谨记一点:一些方法要求先创建其类的示例,然后再调用方法,而有些方法则不需要。

如何确定是否需要先创建类的实例,然后再调用其方法?

一种了解方法调用方式的方法是参考文档。 可通过其中的一些示例了解是必须从对象实例调用方法,还是必须直接从类调用方法。

文档最有用的部分之一是代码示例,它们展示了如何使用相关方法。

或者,也可以尝试直接从类本身访问该方法。 可能出现的最糟糕的情况是遇到编译错误。

如果在 .NET 编辑器中键入以下代码行:

int result = Random.Next();

你会看到红色波浪线,指示发生编译错误。 将鼠标游标悬停在红色波浪线上,会看到一个弹出窗口,其中显示以下消息:

(1,14): error CS0120: An object reference is required for the non-static field, method, or property 'Random.Next()'

处理返回值和输入参数

我们使用掷骰子代码说明了两种不同方法:有状态(实例)方法和无状态(静态)方法。 但是,同一代码示例可帮助我们了解有关调用方法的其他关键概念,例如处理返回值、接受输入参数和选择方法的重载版本。

返回值

一些方法旨在完成其功能并“安静地”结束。 换言之,它们在完成时不返回值。 这些方法称为 void 方法。

旨在完成后返回值的方法通常是某个操作的结果。 返回值是方法与调用方法的代码进行通信的主要方式。

方法可设计为返回任何数据类型,甚至是另一个类。 在示例中,Random.Next() 方法返回随机生成的数字的 int 值。 我们将返回值保存到变量中,以便稍后在代码中使用。 我们可能已忽略返回值,如下所示:

dice.Next(1, 7);

但这种做法毫无意义。 调用此方法的理由是调用后即可检索 Random 对象的下一个随机值。

输入参数

一些方法旨在接受无输入参数。 这些方法无需额外输入即可完成其任务。

其他方法旨在接受一个或多个输入参数。 输入参数可配置方法执行其工作的方式。 或者,可直接操作输入参数。 我们可通过示例来了解这两种情况。

调用方法时,使用 , 符号分隔每个输入参数。

在下面的代码行中,在 Next() 方法生成新的随机数字时,两个输入参数分别为该方法定义了下限和上限。

int roll = dice.Next(1, 7);

在下面的代码行中,WriteLine() 对输入参数进行操作,使其显示在控制台中。

Console.WriteLine(roll);

使用数据类型定义输入参数。 不能将不同数据类型的值作为输入参数传递,并要求方法正常工作。 相反,C# 编译器将捕获错误,并在编译和运行代码之前强制进行代码修改。 类型检查是 C# 和 .NET 用户检查数据类型来防止最终用户遇到异常的一种方法。

方法签名是为每个输入参数定义的输入参数的数目和数据类型。

重载的方法

.NET 类库中的许多方法都有重载的方法签名。

重载方法是通过多个方法签名定义的。 重载方法提供不同的方式调用方法,或提供不同类型的数据。

在某些情况下,可通过给定方法的重载版本,将不同数据类型的值发送到方法中。 例如,Console.WriteLine() 方法具有 19 个不同的重载版本。 其中的大多数重载都允许将不同类型的打印数据发送到控制台。 请考虑以下代码:

int number = 7;
string text = "seven";Console.WriteLine(number);
Console.WriteLine();
Console.WriteLine(text);

在此示例中,将调用 WriteLine() 方法的三个单独的重载版本。

在其他情况下,给定方法的重载版本允许向方法发送其他有关所需结果的配置详细信息。 例如,Random.Next() 方法具有三个不同的重载版本。 这三个版本允许对随机生成的数字设置约束。

下面的代码示例使用三个不同的重载版本调用 Random.Next() 。

Random dice = new Random();
int roll1 = dice.Next();
int roll2 = dice.Next(101);
int roll3 = dice.Next(50, 101);Console.WriteLine($"First roll: {roll1}");
Console.WriteLine($"Second roll: {roll2}");
Console.WriteLine($"Third roll: {roll3}");

Next() 方法的第一个版本不设置上下限,因此该方法将返回介于 0 到 2,147,483,647 之间的值,后者是 int 可存储的最大值。

Next() 方法的第二个版本将最大值指定为上限,因此在这种情况下,我们会得到介于 0 到 100 之间的随机值。

Next() 方法的第三个版本同时指定最小值和最大值,因此在这种情况下,我们会得到介于 50 到 100 之间的随机值。

了解方法的作用、方法是否有重载版本、方法接受的输入参数数据类型,以及方法返回的内容。

使用 IntelliSense

首先,代码编辑器的 Intellisense 可在不离开编码环境的情况下告知有关方法的很多信息。 Intellisense 是 Microsoft 为代码编辑器提供的一项功能。 输入代码时,在插入点下的弹出窗口中提供提示和简短的参考信息。 键入代码时,Intellisense 弹出窗口会根据上下文更改其内容。

例如,缓慢输入字词 dice 时,Intellisense 显示所有 C# 关键字、标识符(或者是代码中的变量名称),以及 .NET 类库中与输入的字母匹配的类。 代码编辑器的自动完成功能用于键入 Intellisense 弹出窗口中最匹配的字词。

若要体验 Intellisense,请依次输入字母 d、i、c。 Intellisense 弹出时,应显示 dice 标识符。 在键盘上选择 tab 键,即可完成整个字词。 也可使用向上键和向下键更改选择。

如果 Intellisense 窗口消失,可以使用键盘上的 backspace 键选择该窗口,或重新输入上一个符号以重新打开 Intellisense。

接下来,输入成员访问运算符。 Intellisense 弹出窗口再次出现,并显示所有可用的方法(以及类的其他成员)。 如果输入字母 N,则筛选此列表,且字词 Next 应为优先选项。 同样,在键盘上选择 tab 键,即可自动完成整个字词。

C#_.NET 类库简介相关推荐

  1. 【Java程序设计】Java基础类库简介

    Java基础类库简介 文章目录 Java基础类库简介 一.Java基础类库介绍 二.语言包(java.lang) (1)数据类型包裹类 1.生成数据类型包裹类对象的方法 2.得到基本数据类型数据的方法 ...

  2. Java应用编程_常用类库汇总2(日期类正则表达式国际化程序)

    总览[Java SE] 相关文章链接 [Java应用编程_常用类库汇总1(字符串处理类&&对象克隆&数字操作类库&-)] [Java应用编程_常用类库汇总3(开发支持类 ...

  3. Unity学习日志_动画系统简介

    Unity学习日志_动画系统简介 Animation,Legacy动画系统 若要使用Animation,需要在创建Clip之前为物体手动添加Animation组件. Animation组件面板: 属性 ...

  4. 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关

    微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...

  5. GalHttprequest类库简介——android平台上的一个轻量级的http网络请求及缓存框架

    2019独角兽企业重金招聘Python工程师标准>>> GalHttprequest名字的由来 开发过iOS项目的朋友都应该知道 ASIHTTPRequest类库, ASIHTTPR ...

  6. opengl层次建模_层次建模简介

    opengl层次建模 介绍 (Introduction) It is not uncommon to find samples in our datasets that are not complet ...

  7. 迁移学习 迁移参数_迁移学习简介

    迁移学习 迁移参数 介绍 (Introduction) We as humans have the ability to transfer the knowledge gained in one ta ...

  8. ASIHTTPRequest类库简介

    参考来自:http://www.cnblogs.com/dotey/archive/2011/05/10/2041966.html 官方网站: http://allseeing-i.com/ASIHT ...

  9. [Guava源码日报(1)]Guava类库简介

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/SunnyYoona/article/details/50805613 1. 简介 Guava工程包含 ...

  10. 图像修复 图像补全_图像修复简介

    图像修复 图像补全 In practical applications, images are often corroded by noise. These noises are dust or wa ...

最新文章

  1. JSP学习笔记(五):日期处理、页面重定向、点击量统计、自动刷新和发送邮件...
  2. 苹果地图副总裁_也许,苹果汽车的到来只是早晚问题
  3. 宇宙和世界真的是虚拟的吗?
  4. hibernate中inverse作用
  5. Python3 与 C# 网络编程之~ 网络基础篇
  6. sql server 2008 日志处理
  7. android项目wehpu,README.md
  8. vivo NEX 3S 5G今日登场:无界瀑布屏加持 世界随处可及
  9. CentOS下搭建测试WEB平台
  10. c语言中不能编译,为什么`int;`可以在C语言中很好地编译,而在C ++中却不能?
  11. Java 实验5 T5
  12. struts框架的原理和应用_分布式开源调度框架TBSchedule原理与应用
  13. android 中RecyclerView 嵌套了 GridView 的用法
  14. How to create swiping gesture list items for Windows Phone 7
  15. office 复合文档数据结构解析“初探”
  16. win7 修复计算机无法进入系统,win7开机自动诊断修复无法进入系统重启无效的故障解决...
  17. 详细解说冲压模具的结构和分类
  18. android地图定位到海洋,如何利用卫星导航技术进行高精度海洋测绘定位
  19. matlab编写扫雷,MATLAB版本的扫雷小游戏
  20. Mac 命令行关闭和打开蓝牙

热门文章

  1. RuntimeError: Exporting the operator uniform to ONNX opset version 12 is not supported.
  2. Java Spring 框架详解
  3. zookeeper应用实战之分布式锁
  4. PHP爬虫抓取网页数据
  5. 检验检测系统管理服务器,检验检测管理平台
  6. MongoDB下载安装教程(Windows)
  7. 最好用的两款库存管理软件推荐,不要错过
  8. C++ 自定义String类
  9. mysql下载与安装 win10 64位
  10. 太漂亮了!有了3款开源图标库,不用再去求设计师了