zoukankan      html  css  js  c++  java
  • c#关键字及ref和out

    最近在写程序时遇到ref,out 参数问题。回头有自习看了看MSDN,才有巩固了基础。我把我的测试程序贴出来,大家分享一下。
        ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。传递到 ref 参数的参数必须最先初始化。这与 out 不同,后者的参数在传递之前不需要显式初始化。这是out与ref的却别所在。
         有点像,c++中的函数传递引用,和传递值。比较经典的程序是交换两个数。这里不在贴出代码。
       

    using System;
    using System.Collections.Generic;

    public class MyClass
    {
     public static void Main()
     {
     
      /// 通过测试发现,基类型的参数,在没有用ref 的声明后,其值并没有改变,说明此函数中传递的是值。
      /// 但是,当使用ref 参数是发现,其值发生了变化,说明在此函数中传递的是引用。
      int x=100;
      ChangeTheNumber(ref x);
      Console.WriteLine(x.ToString());
      
      
      ///通过测试发现,类的实例作为,参数,即使不用ref 参数,它的属性也发生了变化。那是因为,类的的实例,是一个引用。所以不用再使用ref了。
      /// 这让我想到了,几个月前的项目开发,在不同窗体之间传递参数,但是一直想着做个什么共有方法,然后互相调用。但是,其实很简单,
      /// 在构造函数中传入需要传入的类的实例就可以了,因为传递的是引用。其属性都会变化。不用再用什么麻烦的方法了。
      ///TestTheClass
         TestClass classInstance1=new TestClass("firstname");
      ChangeTheNumber(classInstance1);
      Console.WriteLine(classInstance1.Name);
      
      TestClass classInstance2=new TestClass("second");
      ChangeTheNumber(classInstance2);
      Console.WriteLine(classInstance2.Name);
      Console.Read();
     }
     
     #region Helper methods

     private static void WL(object text, params object[] args)
     {
      Console.WriteLine(text.ToString(), args); 
     }
     
     private static void RL()
     {
      Console.ReadLine(); 
     }
     
     private static void Break()
     {
      System.Diagnostics.Debugger.Break();
     }

        private static void ChangeTheNumber(ref int number)
     {
      number=100;
     }
     
     private static void ChangeTheNumber(int x)
     {
      x=100;
     }
     
     private static void ChangeTheNumber(TestClass classInstance)
     {
      classInstance.Name="change to another name";
     }
     
     private static void ChangeTheNumber(ref TestClass classInstance)
     {
      classInstance.Name="change to another name";
     }
     #endregion
    }

    ///
    ///测试类
    ///
    public class TestClass
    {
     public TestClass(string name)
     {
      this.name=name;
     }
     
     private string name;
     public string Name
     {
      get
      {
       return name;
      }
      set
      {
       name=value;
      }
     }
    }

  • 相关阅读:
    SpringMVC中利用@InitBinder来对页面数据进行解析绑定
    转型新零售必看:线下零售的运营模型
    主流CTR预估模型的演化及对比
    tensorflow创建自定义 Estimator
    构建分布式Tensorflow模型系列:CVR预估之ESMM
    tensorflow tfdbg 调试手段
    推荐系统算法学习(一)——协同过滤(CF) MF FM FFM
    CTR预估算法之FM, FFM, DeepFM及实践
    深度学习在美团搜索广告排序的应用实践
    Redis集群搭建最佳实践
  • 原文地址:https://www.cnblogs.com/wwwzzg168/p/3568982.html
Copyright © 2011-2022 走看看