• c# 语句关键字


    1. yield

    它表明一个方法,操作符或者get选择器里会出现迭代。

    用yield return 同时返回每一个元素,  返回类型必须是IEnumerable, IEnumerable<T>, IEnumerator, or IEnumerator<T>.

    Example:

    public static IEnumerable<int> Power(int number, int exponent)

    {

      int result = 1;

      for(int i = 0; i< exponent; i++)

      {

        result = result * number;

        yield return result;

      }

    }

    static void Main()

    {

      foreach(int i in Power(2, 8))

      {

        Console.Write("{0}", i);

      }

    }

    public IEnumerable<Galaxy> NextGalaxy

    {

      get

      {

        yield return new Galaxy { Name = "Tadpole", MegaLightYears = 400 };

        yield return new Galaxy { Name = "Pinwheel", MegaLightYears = 25 };

        yield return new Galaxy { "Milky Way", MegaLightYears = 0 };

      }

    }

    2. checked and unchecked

    在checked context中,算术越界会抛出一个异常,在unchecked内容中,不会出现异常,结果会被缩短了。

    如果代码块中没有指定checked还是unchecked, 它取决于编译选项: /checked,  默认是/checked-(不检查)

    3. fixed

    它阻止垃圾回收器重新分配可移动变量。它只能用在unsafe的内容当中。

    fixed语句块设置一个指针指向可管理的变量,在执行的时候获得那个地址。  

    Example:

    fixed (int *p = &pt.x)

    {

      *p = 1;

    }

    在出了大括号之后,任何固定的变量都被不固定或者被垃圾回收器回收。因而,不要再指向这些变量当出了fixed语句块。

    Fixed Sized Buffers :  它可以在数据结构当中,创建一个固定的数组

    例:private fixed char name[30];

    internal unsafe struct MyBuffer

    {

      public fixed char fixedBuffer[128];

    }

    不安全的缓存只能存在于结构体当中

    3. lock

    多线程,防止它们同时访问同一资源。

    一般地,不要lock一个public 类型或者一个实例不在你的控制之下。

    lock(this) 是个问题如果实例可以被公开地访问。

    lock(typeof(MyType)) 是个问题如果MyType是可公开访问的

    lock("myLock") 是个问题,因为其它处理,只要用到相同的字符串,就会共享同样的lock.

    最好是用private的对象加锁,或者private static加锁,对所有的对象而言不可同时访问。

  • 相关阅读:
    Win10桌面点右键一直卡顿转圈怎么解决
    Ubuntu 中检查笔记本 CPU 的温度
    aria2的安装与配置
    Downloading Vim
    如何在Ubuntu 18.04上安装Python 3.8
    理解 chroot
    Ubuntu快捷方式存放的位置
    安装ubuntu双系统后,找不到windows启动项的解决方法
    socks5 协议简介
    mybatis源码1.3 MapperMethod
  • 原文地址:https://www.cnblogs.com/superkklot/p/3703721.html
Copyright © 2020-2023  润新知