zoukankan      html  css  js  c++  java
  • C# 点点滴滴: out和ref

      用c#很长一段时间了,不过基本是啥都不会,当C用的,作为写单片机的,还是真心觉得C比较亲切,呵呵。

      不过总是要进步啊,慢慢积累呗,这次是写一个CAN的上位机模板出来,以后的项目就要彻底告别串口上位机了。

      先说说这个out和ref,就是C语言里面的指针型函数参数。

    // C语言中,传址传递
    void Test_Function( int * temp )
    {
         *temp = 100;    
    }

      今天这样用到C#上,果然悲剧,必须使用ref或out才可以。

      先百度一下区别先:

    ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点。

    使用ref前必须对变量赋值,out不用。

    out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改。 

      C# 例程:

    // C#
    // out
    void Test_Function_1( out int temp )
    {
          // 这里temp已经被清空了,即不能这里直接用temp给别的变量赋值
          // 离开函数前temp必须赋值
          temp = 100;
    }
    
    // 调用
    // 可以不需要初始化
    int temp_1;
    Test_Funton_1(out temp_1);
    // C#
    // ref
    void Test_Function_2( ref int temp )
    {
          // 这里temp已经在调用之前被初始化过了
          // 离开函数前temp可以不修改,也可以修改
          temp = 100;
    }
    
    // 调用
    // 必须初始化
    int temp_2 = 0;
    Test_Funton_2(ref temp_2);

    ------------------------------------------------------------------------------------------

    作者:庞辉

    出处:http://www.cnblogs.com/pang123hui/

    本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名庞辉(包含链接).

  • 相关阅读:
    Introduction to debugging neural networks
    Faster R-CNN教程
    最长递增子序列
    321. Create Maximum Number 解题方法详解
    Ubuntu安装opencv with cuda
    转载:LeetCode:5Longest Palindromic Substring 最长回文子串
    64. Minimum Path Sum
    322. Coin Change
    148. Sort List
    微信浏览器禁止页面下拉查看网址(不影响页面内部scroll)
  • 原文地址:https://www.cnblogs.com/pang123hui/p/2845595.html
Copyright © 2011-2022 走看看