get、set、value、partial、where 、yield 上下文关键字

来源:互联网 发布:ubuntu如何设置源 编辑:程序博客网 时间:2024/05/22 17:10

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


get、set、value
get 在属性或索引器中定义“访问器”方法,以检索该属性或该索引器元素的值。
set 义属性或索引器中的“访问器”方法,用于设置属性或索引器元素的值。
value 隐式参数,用于设置访问器以及添加或移除事件处理程序。

    class People    {        string _name;        string name        {            get            {                return _name;            }            set            {                _name = value;            }        }

注意

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

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

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

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

如果set get属性中没有任何逻辑,就可以使用自动实现的属性。这种属性回自动实现后备成员的变量。

\ \exp   class People    {        string name { get; set; }    }


partial

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

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

namespace PM{    partial class A    {        partial void OnSomethingHappened(string s);    }    // This part can be in a separate file.    partial class A    {        // Comment out this method and the program        // will still compile.        partial void OnSomethingHappened(String s)        {            Console.WriteLine("Something happened: {0}", s);        }    }}


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

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

          public static IEnumerable Power(int number, int exponent)            {                int counter = 0;                int result = 1;                while (counter++ < exponent)                {                    result = result * number;                    yield return result;                }            }            static void Main()            {                // Display powers of 2 up to the exponent 8:                foreach (int i in Power(2, 8))                {                    Console.Write("{0} ", i);                }
注意:

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

不允许不安全块。

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

yield 语句不能出现在匿名方法中。有关更多信息,请参见 匿名方法(C# 编程指南)。

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


where

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

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

    1. something可以是:结构、类、new()、<基类名>或<接口名称>。
    2. 可以同时具有1中的多个约束,且约束自身也可以是泛型类型。
    3. 也可以将约束作用于泛型方法或委托。

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



0 0
原创粉丝点击