C#关键字

本文介绍了C#中的四个重要关键字:get、set、partial和yield。get和set用于属性的读写;partial允许类定义分布在多个文件中;yield用于迭代器块提供值。还介绍了where子句在泛型中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#关键字——get、set、value

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

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

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

 
  1. //简单示例
  2. classEmployee
  3. {
  4. privatestring_name;
  5. publicstringName
  6. {
  7. get{returnthis._name;}
  8. set{this._name=value;}
  9. }
  10. }

注意:

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

不能对接口或显式接口成员实现使用访问器修饰符。

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

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

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

C#关键字——partial

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

[modifiers] partial type

modifiers是可选的。可以是abstract、new、override、static、virtual、extern,以及访问修饰符中的一个。

type 可以是类、结构和接口之一。

示例:

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

 
  1. namespaceHunts.Keywords
  2. {
  3. [System.Serializable]
  4. partialclassTest
  5. {
  6. voidTest1(){}
  7. }
  8. [Conditional("DEBUG")]
  9. partialclassTest
  10. {
  11. voidTest2(){}
  12. }
  13. }

类相当于:

 
  1. namespaceHunts.Keywords
  2. {
  3. [System.Serializable]
  4. [Conditional("DEBUG")]
  5. classTest
  6. {
  7. voidTest1(){}
  8. voidTest2(){}
  9. }

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

C#关键字——where

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

之所以使用类型约束是因为如果要检查泛型列表中的某个项以确定它是否有效,或者将它与其他某个项进行比较,则编译器必须在一定程度上保证它需要调用的运算符或方法将受到客户端代码可能指定的任何类型参数的支持。这种保证是通过对泛型类定义应用一个或多个约束获得的。

 
  1. //句法
  2. publicclassMyGenericClass<T>whereT:something

something可以是:结构、类、new()、< 基类名>或< 接口名称>。

可以同时具有1中的多个约束,且约束自身也可以是泛型类型。

也可以将约束作用于泛型方法或委托。

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

示例:

 
  1. //keywords_where.cs
  2. usingSystem;
  3. usingSystem.Collections;
  4. structMyStruct
  5. {
  6. //...
  7. }
  8. interfaceIMyInterface
  9. {
  10. //...
  11. }
  12. classMyGenericClass<T1,T2>
  13. whereT1:IEnumerable,IMyInterface
  14. whereT2:MyStruct,new()
  15. {
  16. publicvoidMyMethod(T1t1,T2t2)
  17. {
  18. //...
  19. }
  20. }

C#关键字——yield

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

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

示例:

 
  1. //keywords_yield.cs
  2. usingSystem;
  3. usingSystem.Collections;
  4. namespaceHunts.Keywords
  5. {
  6. publicclassEmployee
  7. {
  8. privatestring_name;
  9. privateint_id;
  10. publicstringName
  11. {
  12. get{returnthis._name;}
  13. set{this._name=value;}
  14. }
  15. publicintID
  16. {
  17. get{returnthis._id;}
  18. set{this._id=value;}
  19. }
  20. //为给定数组中的人名进行编号
  21. publicstaticIEnumerableSetIDs(string[]names)
  22. {
  23. intcounter=0;
  24. Employeeresult=newEmployee();
  25. while(counter++<names.Length)
  26. {
  27. result._id=counter;
  28. result._name=names[counter-1];
  29. yieldreturnresult;
  30. }
  31. }
  32. }
  33. classEmployeeList
  34. {
  35. staticvoidMain()
  36. {
  37. string[]names={"Jones","Carl","Dennis","Evan","Hugo","Ivan"};
  38. //显示编号操作的结果
  39. foreach(EmployeeeinEmployee.SetIDs(names))
  40. {
  41. Console.WriteLine("ID:{0}Name:{1}",e.ID,e.Name);
  42. }
  43. Console.Read();
  44. }
  45. }

注意:

yield 语句只能出现在 iterator 块中,该块可用作方法、运算符或访问器的体。这类方法、运算符或访问器的体受以下约束的控制:

不允许不安全块。

方法、运算符或访问器的参数不能是 ref 或 out。

yield 语句不能出现在匿名方法中。

当和 expression 一起使用时,yield return 语句不能出现在 catch 块中或含有一个或多个 catch 子句的 try 块中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值