温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#中关键字get、set、value、partial、where和yield怎么用

发布时间:2021-12-01 14:11:16 来源:亿速云 阅读:152 作者:小新 栏目:编程语言

这篇文章主要介绍C#中关键字get、set、value、partial、where和yield怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

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

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

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

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

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

注意:

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

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

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

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

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

C#关键字——partial

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

[modifiers] partial type

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

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

示例:

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

namespace Hunts.Keywords  {      [System.Serializable]      partial class Test      {          void Test1() { }      }      [Conditional("DEBUG")]      partial class Test      {          void Test2() { }      }  }

类相当于:

namespace Hunts.Keywords  {      [System.Serializable]      [Conditional("DEBUG")]      class Test      {          void Test1() { }          void Test2() { }      }

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

C#关键字——where

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

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

// 句法  public class MyGenericClass< T> where T:something

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

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

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

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

示例: 

 // keywords_where.cs      using System;   using System.Collections;      struct MyStruct   {       //...   }   interface IMyInterface  {      //...  }   class MyGenericClass< T1,T2>      where T1: IEnumerable, IMyInterface      where T2: MyStruct, new()  {      public void MyMethod(T1 t1, T2 t2)      {          //...      }  }

C#关键字——yield

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

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

示例:

// keywords_yield.cs  using System;  using System.Collections;   namespace Hunts.Keywords  {      public class Employee      {          private string _name;         private int _id;          public string Name         {             get { return this._name; }             set { this._name = value; }         }          public int ID         {             get { return this._id; }             set { this._id = value; }         }          // 为给定数组中的人名进行编号         public static IEnumerable SetIDs(string[] names)         {             int counter = 0;             Employee result = new Employee();             while (counter++ <  names.Length)             {                 result._id = counter;                 result._name = names[counter - 1];                 yield return result;             }         }     }      class EmployeeList     {         static void Main()         {             string[] names = { "Jones", "Carl", "Dennis", "Evan", "Hugo", "Ivan" };              // 显示编号操作的结果             foreach (Employee e in Employee.SetIDs(names))             {                 Console.WriteLine("ID:{0} Name:{1}", e.ID,e.Name);             }              Console.Read();         }     }

注意:

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

不允许不安全块。

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

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

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

以上是“C#中关键字get、set、value、partial、where和yield怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI