程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#關鍵字及ref和out

c#關鍵字及ref和out

編輯:C#入門知識

最近在寫程序時遇到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;
  }
 }
}

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved