最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#基礎語法:結構和類區(qū)別詳解

 更新時間:2015年06月18日 10:02:54   投稿:junjie  
這篇文章主要介紹了C#基礎語法:結構和類詳解,本文總結了一些結構和類的不同之處并給出了測試區(qū)別特性代碼,需要的朋友可以參考下

結構和類很相似,也可以包含數(shù)據(jù)成員和函數(shù)成員,但是與類不同,結構是一種值類型,(我們可以理解為一種特殊的值類型所以不存在繼承的問題)為其分配數(shù)據(jù)不需要從托管堆中分配存儲器。結構類型的變量直接包含了該結構的數(shù)據(jù),而類類型的變量所包含的只是對相應對象的一個引用。

 下面總結一下結構和類的不同:

1.結構是值類型,對結構類型的變量賦值將創(chuàng)建所賦值的一個副本。
2.結構實例的默認值不是null,而是具有默認值的初始值。
3.在結構和類中this的意義不一樣。
4.結構不支持繼承(所以結構成員的聲明可訪問性不能是protected,protected internal,結構中的函數(shù)成員不能是abstract 或者virtual,所以在結構中override修飾符只適用于重寫從System.ValueType繼承的方法)但是可以實現(xiàn)接口。
5.在結構中實例字段聲明中不能含有變量的初始值設定項
6.在結構中不能聲明無參數(shù)的實例構造函數(shù)。
7.在結構中不能聲明析構函數(shù)。

測試區(qū)別特性代碼:
 

using System;
namespace StructAndClass
{
  struct SPoint
  {
    public int x, y;
    public SPoint(int x, int y)
    {
      this.x = x;
      this.y = y;
    }
  }
  class CPoint
    {
      public int x, y;
      public CPoint(int x, int y)
      {
        this.x = x;
        this.y = y;
      }
    }
  class Test
  {
    public static void Main()
    {
      SPoint sp1 = new SPoint(2, 5);
      Console.WriteLine("結構/sp1初始值:");
      Console.WriteLine("sp1.x={0}", sp1.x);
      SPoint sp2 = sp1;
      Console.WriteLine("sp1=sp2后:");
      Console.WriteLine("sp1.x={0}");
      Console.WriteLine("sp1.x={0}", sp1.x);
      Console.WriteLine("sp2.x={0}", sp2.x);
      sp1.x = 5;
      Console.WriteLine("再次改變sp1的值后:");
      Console.WriteLine("sp1.x={0}", sp1.x);
      Console.WriteLine("sp2.x={0}", sp2.x);
      Console.WriteLine("============================");
      CPoint cp1 = new CPoint(2,5);
      Console.WriteLine("類/cp1初始值:");
      Console.WriteLine("cp1.x={0}", cp1.x);
      CPoint cp2 = cp1;
      Console.WriteLine("cp1=cp2后:");
      Console.WriteLine("cp1.x={0}", cp1.x);
      Console.WriteLine("cp2.x={0}", cp2.x);
      cp1.x = 5;
      Console.WriteLine("再次改變cp1的值后:");
      Console.WriteLine("cp1.x={0}", cp1.x);
      Console.WriteLine("cp2.x={0}", cp2.x);
      Console.ReadKey();
    }
  }
}


對于結構,即使沒有new運算符聲明的結構變量也是有效的,結構雖然不能聲明無參數(shù)的實力構造函數(shù),但是它其實隱式的包含了一個無參數(shù)的構造函數(shù):而且在結構的所有字段沒有明確賦值之前,不能調用結構的實例函數(shù)成員。在結構的構造函數(shù)中應該給所有的字段賦值。例如:
 

struct DC
  {
    public int x, y;
    public int X
    {
      set
      {
        x = value;
      }
      get
      {
        return x;
      }
    }
    public int Y
    {
      set
      {
        y = value;
      }
      get
      {
        return y;
      }
    }
    public DC(int x,int y)
    {
      this.x = x;
      this.y = y;
    }
  }
  struct RDC
  {
    public int x, y;
    public int X
    {
      set
      {
        x = value;
      }
      get
      {
        return x;
      }
    }
    public int Y
    {
      set
      {
        y = value;
      }
      get
      {
        return y;
      }
    }
    public RDC(int x, int y)
    {
      this.x = x;
      this.y = y;
    }
  }
  class Test
  {
    public static void Main()
    {
      DC dc=new DC();
      dc.x = 3;
      dc.y = 5;
      Console.WriteLine("已經(jīng)對x,y初始化后:");
      Console.WriteLine("此時可以訪問和修改dc.X={0}的值",dc.X);
      Console.WriteLine("我在這里創(chuàng)建了一個DC的復制結構RDC/n并且不對x,y初始化就會報錯");
      RDC rdc;
       rdc.y = 5;//可以編譯通過
       rdc.X = 3;//這里就會出錯,不能編譯通過
      Console.WriteLine("=======test over================");
     }
  }

 

在結構的實例構造函數(shù)內,this 相當于一個結構類型的 out 參數(shù),(必須在內部對它明確賦值)而在結構的實例函數(shù)成員內,this 相當于一個結構類型的 ref 參數(shù)。在這兩種情況下,this 本身相當于一個變量,因而有可能對該函數(shù)成員調用所涉及的整個結構進行修改(如對 this 賦值,或者將 this 作為 ref 或 out 參數(shù)傳遞)。例如:(引用上面的例子)

 

struct DC
  {
    public int x, y;
    public int X
    {
      set
      {
        x = value;
      }
      get
      {
        return x;
      }
    }
    public int Y
    {
      set
      {
        y = value;
      }
      get
      {
        return y;
      }
    }
    public DC(int x,int y)
    {
      X= x;//這里就是錯的
      Y = y;//會提示沒有給this對象的所有字段賦值
    }
  }

相關文章

  • C#中System.Array.CopyTo() 和 System.Array.Clon() 的區(qū)別

    C#中System.Array.CopyTo() 和 System.Array.Clon()&nbs

    System.Array.CopyTo()和System.Array.Clone()是用于數(shù)組復制的兩種不同方法,本文就來介紹C,#中System.Array.CopyTo() 和 System.Array.Clon() 的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • C# 設計模式系列教程-簡單工廠模式

    C# 設計模式系列教程-簡單工廠模式

    簡單工廠模式職責單一,實現(xiàn)簡單,且實現(xiàn)了客戶端代碼與具體實現(xiàn)的解耦。
    2016-06-06
  • C#實現(xiàn)更改MDI窗體背景顏色的方法

    C#實現(xiàn)更改MDI窗體背景顏色的方法

    這篇文章主要介紹了C#實現(xiàn)更改MDI窗體背景顏色的方法,涉及C#窗體背景色的設置技巧,非常簡單實用,需要的朋友可以參考下
    2015-08-08
  • c#代碼生成URL地址的示例

    c#代碼生成URL地址的示例

    這篇文章主要介紹了c#代碼生成URL地址的方法,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-04-04
  • C#二維數(shù)組基本用法實例

    C#二維數(shù)組基本用法實例

    這篇文章主要介紹了C#二維數(shù)組基本用法,以實例形式分析了C#中二維數(shù)組的定義、初始化、遍歷及打印等用法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • c#winform窗口頁面一打開就加載的實現(xiàn)方式

    c#winform窗口頁面一打開就加載的實現(xiàn)方式

    這篇文章主要介紹了c#winform窗口頁面一打開就加載的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • C#多線程系列之線程通知

    C#多線程系列之線程通知

    本文詳細講解了C#多線程中的線程通知,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • ToLua框架下C#與Lua代碼的互調操作

    ToLua框架下C#與Lua代碼的互調操作

    這篇文章主要介紹了ToLua框架下C#與Lua代碼的互調操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Unity3D實現(xiàn)分頁系統(tǒng)

    Unity3D實現(xiàn)分頁系統(tǒng)

    這篇文章主要為大家詳細介紹了Unity3D實現(xiàn)分頁系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C# ExecuteScalar()方法案例講解

    C# ExecuteScalar()方法案例講解

    這篇文章主要介紹了C# ExecuteScalar()方法案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08

最新評論

三亚市| 芷江| 定襄县| 萍乡市| 承德市| 双牌县| 民丰县| 大余县| 衡阳市| 满城县| 淄博市| 子洲县| 北海市| 开化县| 南靖县| 韶关市| 措美县| 墨竹工卡县| 十堰市| 南汇区| 宿州市| 惠安县| 虹口区| 花莲市| 遵义县| 陆川县| 临沂市| 营口市| 桐梓县| 浮梁县| 华坪县| 铅山县| 两当县| 威海市| 大宁县| 丽江市| 江山市| 西昌市| 芒康县| 峡江县| 师宗县|