C# 参考之上下文关键字get、set、value、partial、where和yield

C# 中的执行上下文关键字是什么? 在C#中,执行上下文是指在程序执行期间,用于跟踪和管理程序状态的关键信息。通过使用特定的关键字,开发人员可以控制和操作执行上下文,以实现对程序行为的精确控制。下面将介绍C#中的几个与执行上下文相关的关键字。``lock` 关键字用于实现互斥锁,用于在多线程环境中保护共享资源的访问。这些关键字在C#中提供了丰富的功能,帮助开发人员更好地控制程序的执行上下文和资源管理。通过合理地使用这些关键字,可以提高程序的性能、可读性和可维护性。await` 关键字用于等待异步操作的结果,在等待期间允许执行其他操作。 阅读详情

上下文关键字用于提供代码中的特定含义,但它不是 C# 中的保留字。

get、set、value

get 在属性或索引器中定义“访问器”方法,以检索该属性或该索引器元素的值。

set 义属性或索引器中的“访问器”方法,用于设置属性或索引器元素的值。

value 隐式参数,用于设置访问器以及添加或移除事件处理程序。

// 简单示例
class Employee
{
    
private string _name;
    
public string Name
    {
        
get { return this._name;  }
        
set { this._name = value; }
    }
}

注意:

  1. get、set“访问器”,在默认情况下具有相同的访问级别。但是有时鉴于对读写的考虑,通常可以限制set的访问级别。对属性或索引器使用访问修饰符受以下条件的制约:
    1. 不能对接口或显式接口成员实现使用访问器修饰符。

    2. 仅当属性或索引器同时具有 set 和 get 访问器时,才能使用访问器修饰符。这种情况下,只允许对其中一个访问器使用修饰符。

    3. 如果属性或索引器具有 override 修饰符,则访问器修饰符必须与重写的访问器的访问器(如果有的话)匹配。

    4. 访问器的可访问性级别必须比属性或索引器本身的可访问性级别具有更严格的限制。


partial

partial 分部类型定义允许将类、结构或接口的定义拆分到多个文件中。

[modifiers] partial type
  1. modifiers是可选的。可以是abstract、new、override、static、virtual、extern,以及访问修饰符中的一个。
  2. type 可以是类、结构和接口之一。

示例:

以下的部分类在编译时,将会合并,包括它的方法、类型特性等等。 

 1 namespace Hunts.Keywords
 2 {
 3     [System.Serializable]
 4     partial class Test
 5     {
 6         void Test1() { }
 7     }
 8     [Conditional("DEBUG")]
 9     partial class Test
10     {
11         void Test2() { }
12     }
13 }

类相当于:

 1 namespace Hunts.Keywords
 2 {
 3     [System.Serializable]
 4     [Conditional("DEBUG")]
 5     class Test
 6     {
 7         void Test1() { }
 8         void Test2() { }
 9     }
10 }

关于部分(类、接口、结构)的详细使用,可以参阅MSDN Library中的部分类。


where

where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量。

  1. 之所以使用类型约束是因为如果要检查泛型列表中的某个项以确定它是否有效,或者将它与其他某个项进行比较,则编译器必须在一定程度上保证它需要调用的运算符或方法将受到客户端代码可能指定的任何类型参数的支持。这种保证是通过对泛型类定义应用一个或多个约束获得的。
// 句法
public class MyGenericClass<T> where T:something
    1. something可以是:结构、类、new()、<基类名>或<接口名称>。
    2. 可以同时具有1中的多个约束,且约束自身也可以是泛型类型。
    3. 也可以将约束作用于泛型方法或委托。

要更深入的了解可以参阅MSDN Library中的“泛型编程”以及“类型参数的约束”这些内容。

示例: 

 

 1 // keywords_where.cs
 2 
 3 using System;
 4 using System.Collections;
 5 
 6 struct MyStruct
 7 {
 8     //...
 9 }
10 
11 interface IMyInterface
12 {
13     //...
14 }
15 
16 class MyGenericClass<T1,T2>
17     where T1: IEnumerable, IMyInterface
18     where T2: MyStruct, new()
19 {
20     public void MyMethod(T1 t1, T2 t2)
21     {
22         //...
23     }
24 }
 


yield

yield 在迭代器块中用于向枚举数对象提供值或发出迭代结束信号。 

// expression 进行计算并以枚举数对象值的形式返回。expression 必须可以隐式转换为迭代器的 yield 类型。
yield return expression;
yield break;

示例:

 1 // keywords_yield.cs
 2 using System;
 3 using System.Collections;
 4 
 5 namespace Hunts.Keywords
 6 {
 7     public class Employee
 8     {
 9         private string _name;
10         private int _id;
11 
12         public string Name
13         {
14             get { return this._name; }
15             set { this._name = value; }
16         }
17 
18         public int ID
19         {
20             get { return this._id; }
21             set { this._id = value; }
22         }
23 
24         // 为给定数组中的人名进行编号
25         public static IEnumerable SetIDs(string[] names)
26         {
27             int counter = 0;
28             Employee result = new Employee();
29             while (counter++ < names.Length)
30             {
31                 result._id = counter;
32                 result._name = names[counter - 1];
33                 yield return result;
34             }
35         }
36     }
37 
38     class EmployeeList
39     {
40         static void Main()
41         {
42             string[] names = { "Jones", "Carl", "Dennis", "Evan", "Hugo", "Ivan" };
43 
44             // 显示编号操作的结果
45             foreach (Employee e in Employee.SetIDs(names))
46             {
47                 Console.WriteLine("ID:{0} Name:{1}", e.ID,e.Name);
48             }
49 
50             Console.Read();
51         }
52     }
53 }

注意:

  1. yield 语句只能出现在 iterator 块中,该块可用作方法、运算符或访问器的体。这类方法、运算符或访问器的体受以下约束的控制:
    • 不允许不安全块。
    • 方法、运算符或访问器的参数不能是 ref 或 out。
  2. yield 语句不能出现在匿名方法中。
  3. 当和 expression 一起使用时,yield return 语句不能出现在 catch 块中或含有一个或多个 catch 子句的 try 块中。
利用Python脚本在ADS2024 Update2中动态绘制与验证LPDDR5眼图模板 本文详细介绍了如何在ADS2024 Update2中,利用Python脚本动态绘制与验证LPDDR5眼图模板。通过调用DDS Python接口,工程师可在仿真后无需重新运行,即可灵活添加、修改矩形或六边形眼图模板,并实现批量自动化处理,从而极大提升高速信号(如LPDDR5)的调试与验证效率。 阅读详情

相关推荐

雷达截面积建模仿真(RCS)

在目标侧,其形状、材料、尺寸(相对于雷达波长)和相对于雷达观察方向的方向等特征都会影响雷达看到的RCS。严格的数学处理超出了讨论的范围,但入射波和目标之间的相互作用可以定性描述。对于给定的散射方向,可以积分求和物体表面电流的振幅相位,当电流同相时,会出现较大的回波幅度。随着目标方向和雷达视角随时间变化,电流振幅和相位会发生变化,形成看似随机的峰值和零点的散射模式,出现“相长”和“相消”干涉。除了雷达到目标的距离外,雷达截面(RCS)是RRE(雷达距离方程)中唯一与目标相关的参数,因此不在雷达设计者的。

qq_30796447的博客 3138

C#类方法声明where的用法

转载:https://www.cnblogs.com/tudouguaishou/p/4773341.html where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量。 1.接口约束。 例如,可以声明一个泛型类MyGenericClass,这样,类型参数T就可以实现 IComparable<T> 接口: publicclassMyGene...

qq_42380656的博客 1838

SQL Prompt 9.0插件突然无法使用解决办法(附防联网激活)多图+文字

可能由于Redgate公司最近抓盗版抓得严,导致激活后的SQL Prompt联网后突然无法使用,无论卸载重装都没办法继续使用,本人同时使用SQL Assistant和SQL Prompt,我喜欢SQL Assistant代码提示功能,而SQL Prompt我喜欢将查询结果复制后可以直接生产插入脚本,这是最爽的一件事,即便对表有多么熟悉,没有这些插件,几行语法都要敲大半天,目前本人已经离不开这两个插...

骚团长的博客 1万+

C#关键字汇总

学习C#

weixin_43737866的博客 6316

ThingsBoard3.9.1规则引擎方式发送钉钉通知消息

thingsboard3.9.1/4.0规则链方式发送钉钉通知消息。

hssjf的专栏 531

2.STM32F407ZGT6 学习笔记-移植 FreeRTOS

1. 在工程下建议FreeRTOS文件夹 2. 在FreeRTOS文件夹下建立 src 和 port 文件夹 (src用于存放freertos源码,port文件夹存放内存和接口相关的文件) 3. 复制freertos/source文件夹下所有c文件复制到刚刚建立的freertos/src目录下 4. 复制FreeRTOSv9.0.0\FreeRTOS\Source\portablex下的MemMang和RVDS文件夹复制到刚刚建立的port问价夹下 5. 将FreeRTOSv9.0.0\FreeRTOS

Car12 1233

C#中的常用关键字及用法

C# 中常用的一些关键字,掌握这些关键字可以帮助开发人员更好地控制程序的流程和语法规则。在实际的开发中,开发人员还需要了解更多的关键字和保留字,以便更好地进行编程。

jiawei31191的博客 6267

【WLAN】【调试】再谈如何使用Wireshark解密WiFi数据包——使用TK信息

- 本文介绍了一种wireshark使用TK信息解密空口报文的方式,该方式对是否有关联过程的报文没有要求。

一介草民,只为生活。 1188

【转载】C# 参考之上下文关键字get、set、value、partial、where和yield

转自:http://www.cnblogs.com/hunts/archive/2007/01/18/get_partial_where_yield.html 上下文关键字用于提供代码中的特定含义,但它不是 C# 中的保留字。 get、set、value get 在属性或索引器中定义“访问器”方法,以检索该属性或该索引器元素的值。 set 义属性或索引器中的“访问器”方法,用于设置属性或索...

weixin_33694620的博客 180

国产化替代落地:C#+Avalonia跨平台开发(麒麟系统适配全流程)

摘要: 随着国产化替代政策的推进,麒麟操作系统成为国产替代的重要选择。本文介绍了如何使用C#和Avalonia框架开发跨平台应用,适配麒麟系统。Avalonia支持Windows、Linux(包括麒麟)和macOS,通过XAML设计UI,便于开发者快速上手。文章详细讲解了开发环境配置、XAML控件设计、Linux特性适配及性能优化,并强调政府30%研发补贴带来的政策红利。未来,随着国产系统生态完善,C#+Avalonia将成为企业跨平台开发的高效解决方案。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3475

IP-Guard安全网关实例

企业相关情况: 1.OA系统,主要为日常工作使用,该系统IP为192.168.1.2,端口为8080; 2.文件共享服务器,用于存放日常工作资料和文档,该文件共享服务器的IP为192.168.1.1,其中\\192.168.1.1\private 目录中的存放着公司重要文档,不能随意外传; 3.安全网关已采用串联的方式联入网络,IP为192.168.2.6,所有机器访问OA系统和文件共享服务...

IP-Guard专栏 707

C# 参考之上下文关键字get、set、value、partial、where和yield(zhuan)

上下文关键字用于提供代码中的特定含义,但它不是 C# 中的保留字。 get、set、value get 在属性或索引器中定义“访问器”方法,以检索该属性或该索引器元素的值。 set 义属性或索引器中的“访问器”方法,用于设置属性或索引器元素的值。 value 隐式参数,用于设置访问器以及添加或移除事件处理程序。 //简单示例classEmployee{private string_na...

weixin_30337251的博客 105

反应动力学仿真软件:Kintecus_(3).Kintecus安装与配置

在本节中,我们将详细介绍如何安装和配置Kintecus反应动力学仿真软件。Kintecus是一款功能强大的工具,用于模拟和分析化学反应的动力学过程。正确安装和配置软件是开始使用它的第一步。我们将分步骤介绍软件的安装过程,并提供一些基本配置的示例。

kkchenjj的博客 1553

C#常见关键字

C#关键字

weixin_52774865的博客 2800

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

c#语言中常用的关键字,常用C#关键字详解教程(比较全面)

不论你是新手还是老手,是否对C#的某些关键字有些摸不到头脑呢?现在我就和大家一起学习一下这些关键字的含义类型Void用作方法的返回类型时,void 关键字指定方法不返回值。在方法的参数列表中不允许使用 void。采用以下形式声明一个无参数的、不返回值的方法:Ovid SampleMethod();Var在方法范围中声明的变量可以具有隐式类型 var。隐式类型的本地变量是强类型变量(就好像您已经声明...

weixin_42503660的博客 5551

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

c#关键字及说明

c# 包含哪些关键字? 关键字是 C# 编译器预定义的保留字。这些关键字不能用作标识符,但是,如果您想使用这些关键字作为标识符,可以在关键字前面加上 @ 字符作为前缀。 在 C# 中,有些关键字在代码的上下文中有特殊的意义,如 get 和 set,这些被称为上下文关键字(contextual keywords)。 下表列出了 C# 中的保留关键字(Reserved Keywords)和上下文关键字(Contextual Keywords): abstract 可以和类、方法、属性、索引器及事件一起使用,

weixin_54756832的博客 6434

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# 上下文关键字 get set init 用法

上下文关键字 get set init 用法

weixin_44927764的博客 533

(19)C# 基础—— 关键字大全

.NET C# Web开发学习之路(19)—— 关键字大全 值类型关键字 关键字 说明 关键字 说明 enum 用于声明枚举 struct 用于声明结构 char 声明System.Char结构的字符,表示Unicode字符 decimal 128位浮点类型,适合于财务和货币计算 float 32位浮点值的简单类型 ...

编程菜鸟0604的博客 1996

对C#中关键字的整理

  abstract:标识一个可以扩展但不能被实体化得、必须被实现得类或方法;as:一个转换操作符,如果转化失败,就返回null;base:用于访问被派生类或构造中得同名成员隐藏的基类成员;bool:表示布尔值的简单类型;break:用于从loop或switch语句中推出得跳转语句;byte:表示8位长度无符号整数的简单类型;case:指定在swit

寒江雪的世界 999

C#基础知识-泛型类型关键字New和Where

New 约束 new 约束指定泛型类声明中的类型实参必须有公共的无参数构造函数。 若要使用 new 约束,则该类型不能为抽象类型。 class ItemFactory<T> where T : new() { public T GetNewItem() { return new T(); } } new 关键字还可用于创建类型的实例或用作成员声明修饰符。 Where 约束 泛型定义中的 where 子句指定对用作泛型类型、方法、委托或本地函数中类型参数的

qq_41812739的博客 570

常用C#关键字详解教程(比较全面)

转自:https://www.jb51.net/article/82258.htm 学习C#很久了,但可能你也和我一样,总有那么一两个关键词,说不清楚它是什么意思,有什么用,那么这篇文章就带你一一讲解。 不论你是新手还是老手,是否对C#的某些关键字有些摸不到头脑呢?现在我就和大家一起学习一下这些关键字的含义 类型 Void 用作方法的返回类型时,void 关键字指定方法不返回值。 在方...

alincea的博客 1万+
上一篇: C#线程池用法
下一篇: C# 参考之转换关键字:operator、explicit与implicit
cuoban
博客等级 码龄24年 239粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值