熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#語言中的重點知識詳解(二)

2013-11-13 09:57:06  來源: .NET編程 

  第三章 類屬性
  
  使用過RAD開發工具的一定inspector很熟悉程序員通過它可以操作對象的屬性DELPHI中引入了PUBLISH關鍵字來公布對象屬性受到程序員的普遍歡迎通過存取標志來訪問private成員在c#中有兩種途徑揭示類的命名屬性——通過域成員或者通過屬性前者是作為具有公共訪問性的成員變量而被實現的後者並不直接回應存儲位置只是通過存取標志(accessors)被訪問當你想讀出或寫入屬性的值時存取標志限定了被實現的語句用於讀出屬性的值的存取標志記為關鍵字get而要修改屬性的值的讀寫符標志記為set
  
  類屬性
  
  只能讀 get
  只能寫 set
  可讀可寫 set/get
  
  請看例子
  
  using System;
  
  public class Test
  {
  private int m_nWrite;
  private int readonly m_nRead=;
  private int m_nWriteRead;
  
  public int WRITEREAD
  {
  get {return m_nWriteRead;}
  set {m_nWriteRead=value;}
  }
  
  public int WRITE
  {
  set { m_nWrite = value; }
  }
  
  public int READ
  {
  get {return m_nRead;}
  }
  
  }
  
  class TestApp
  {
  public static void Main()
  {
  Test MyTest = new Test();
  int i=MyTestREAD; //get
  MyTestWRITE=; //set
  MyTestWRITEREAD+= ; //set and get
  
  ConsoleWriteLine(get:{} set:{} set/get:{} iMyTestWRITEMyTestWRITEREAD);
  }
  }
  
  如果你想要隱藏類內部存儲結構的細節時就應該采用存取標志存取標志給值參數中的屬性傳遞新值同時你可以獲得實現在set標志中增加有效代碼的機會
  
  第四章C# 中的加框與去框
  
  C# 運行時中有兩種類型引用類型(reference)(在 C# 中用類聲明)和值類型(value)(在 C# 中用結構聲明)引用和值類型在幾個重要方面有所不同值類型感覺上象一個數據它包括預定義數值類型(如intbool)以及用戶定義的類型(circlePoint等)如上文所述值類型的變量是實際的值所以在您使用變量時通常處理的是實際的值
  
  
  >:首先讓我們來看一看值類型(value)(在 C# 中用結構聲明)
  
  對於任何類型的非框機構都又如下的形
  //
  struct T_Point
  {
  T xy;
  T_Point(T xy) {
  thisx=x;
  thisy=y
  }
  }
  //
  
  sample:
  
  class test{
  struct Point
  {
  public int x y;
  public Point(int x int y) {
  thisx = x;
  thisy = y;
  }
  }
  
  public static void Main()
  {
  Point p = new Point( );
  object f = p;
  px = ;
  ConsoleWrite(((Point)f)x);
  ConsoleWrite(px);
  }
  }
  
  讓我麼來看一看最後的結果是什麼?結果是在第二次指定變量後兩個獨立的變量包含相同的值
  修改 p 的值不會改變 f 的值
  
  >:引用類型用於所有不能用作值類型的對象引用類型的變量指向堆中對象的實例這意味著在將一個變量指定給另一個變量時只是指定了引用而不是值
  
  對於任何類型的框類都又如下的形
  //
  class T_Point
  {
  T xy;
  T_Point(T xy) {
  thisx=x;
  thisy=y
  }
  }
  //
  class test{
  class Point
  {
  public int x y;
  public Point(int x int y) {
  thisx = x;
  thisy = y;
  }
  }
  
  public static void Main()
  {
  Point p = new Point( );
  object f = p;
  px = ;
  ConsoleWrite(((Point)f)x);
  ConsoleWrite(px);
  }
  }
  
  讓我麼來看一看最後的結果是什麼?很奇怪嗎結果是在第二次指定變量後p 和 f 指向同一對象這意味著修改 p 的名稱也將改變 f 的名稱因為它們引用同一實例修改類值的成員稱為變更者而不具有任何變更者的類稱為不可變類不可變類的存在可以使類的行為類似於值類但不能寫入為值類
  
  在c#語言中同時使用引用和值兩種類型是很重要的值類型輕便高效而引用類型適用於面向對象的開發但是盡管我們有兩了種類型但有時我們需要的是更為簡單的模型使用單一的能夠囊括所有可能值的類型這樣一個通用基類能夠調用任何值的虛函數寫入能夠存儲任何值的集合類為實現這一目的c#語言運行時采用一種方法讓值類型在需要時轉化為引用類型即通過稱為加框的進程被加框的類型是通用基類可以被各種類型的對象引用
  
  解框
  
  int i = ;
  object k = i;// 將 int i 加框到對象 k 中
  int j=(int)k; // 解框 k 到 value
  
  當賦值給 k 時作為賦值的一部分C# 編譯器將創建足夠容納堆中 int 的引用類型包裝將值復制到該加框然後將加框標記為實際類型以便運行時了解加框的類型要從加框中取值必須使用強制類型裝換來指定加框的類型(對象能夠保留任何類型)在執行過程中運行時將檢查對象變量引用的類型是否為強制類型轉換中指定的類型如果類型正確值將從加框中復制回值類型變量如果類型不正確將導致異常請注意解除加框過程中不會進行其他轉換類型必須完全匹配
  
  請注意以下代碼
  
  long i = ;
  object k = i;// 將 long i 加框到對象 k 中
  ulong j=(ulong)k;
  
  #error
  
  由於加框類型於解框類型的不同將出錯如果認為像c++語言一樣下面的操作將正確那也是不對的
  
  long i = ;
  object k = i;
  int j=(int)k;
  
  #error
  
  最後總結一下加框和解框加框和解框使編寫和使用具有通用對象參數的函數變得簡單而直接
From:http://tw.wingwit.com/Article/program/net/201311/12088.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.