天天看點

C#基本概念和類型(完善中)

  1.結構體

struct 類型是一種值類型,通常用來封裝小型相關變量組,例如,矩形的坐标或庫存商品的特征。下面的示例顯示了一個簡單的結構聲明。

public struct Book
{      
public decimal price;
      
public string title;
        
public string author;
      
}      

結構還可以包含構造函數、常量、字段、方法、屬性、索引器、運算符、事件和嵌套類型,但如果同時需要上述幾種成員,則應當考慮改為使用類作為類型。

結構可以實作接口,但它們無法繼承另一個結構。是以,結構成員無法聲明為 protected。

2.常量

const 關鍵字用于修改字段或局部變量的聲明。它指定字段或局部變量的值是常數,不能被修改。例如:

const int x = 0;

public const double gravitationalConstant = 6.673e-11;

private const string productName = "Visual C#";

常數表達式是在編譯時可被完全計算的表達式。是以,對于引用類型的常數,可能的值隻能是 string 和 null。

常數聲明可以聲明多個常數,例如:

public const double x = 1.0, y = 2.0, z = 3.0;      

不允許在常數聲明中使用 static 修飾符。

常數可以參與常數表達式,如下所示:

public const int c1 = 5;
      
public const int c2 = c1 + 100;      
readonly 關鍵字與 const 關鍵字不同。const 字段隻能在該字段的聲明中初始化。readonly 字段可以在聲明或構造函數中初始化。是以,根據所使用的構造函數,readonly 字段可能具有不同的值。另外,const 字段是編譯時常數,而readonly 字段可用于運作時常數,如下面的代碼行所示:

public static readonly uint l1 = (uint)DateTime.Now.Ticks;

3.short整形類型 short 關鍵字表示一種整數資料類型,該類型根據下表顯示的大小和範圍存儲值。
類型 範圍 大小 .NET Framework 類型
short -32,768 到 32,767 有符号 16 位整數 System.Int16
可如下例所示聲明并初始化 short 類型的變量:   short x = 32767;          在以上聲明中,整數

32767

從int 隐式轉換為short。

使用 short 強制轉換可保證調用正确的類型,例如:

SampleMethod(5);         // Calling the method with the int parameter
      
SampleMethod((short)5);  // Calling the method with the short parameter      

存在從 short 到 int、long、float、double 或decimal 的預定義隐式轉換。不能将存儲大小更大的非文本數值類型隐式轉換為short

short x = 5, y = 12;      則

以下指派語句将産生一個編譯錯誤,原因是指派運算符右側的算術表達式在預設情況下的計算結果為 int 類型。

short

z = x + y; // Error: no conversion from int to short

若要解決此問題,請使用強制轉換:

short

z = (

short

)(x + y); // OK: explicit conversion

但是,在目标變量具有相同或更大的存儲大小時,使用下列語句是可能的:
int m = x + y;    long n = x + y;      

不存在從浮點型到 short 的隐式轉換。例如,除非使用顯式強制轉換,否則以下語句将生成一個編譯器錯誤:

short x = 3.0; // Error: no implicit conversion from double

short y = (short)3.0; // OK: explicit conversion

 4.委托(或者“代理”)

待完善這個!!!!!! 

5.裝箱 拆箱

裝箱和拆箱使值類型能夠被視為對象。對值類型裝箱将把該值類型打包到 Object 引用類型的一個執行個體中。這使得值類型可以存儲于垃圾回收堆中。如下,把整形值類型裝箱成object引用類型。即整型變量

i

被“裝箱”并指派給對象

o

int i = 123;
object o = (object) i;  // boxing
      
拆箱将從對象中提取值類型。然後,可以對對象

o

取消裝箱并将其指派給整型變量

i

o = 123;
i = (int) o;  // unboxing
      

性能

相對于簡單的指派而言,裝箱和取消裝箱過程需要進行大量的計算。對值類型進行裝箱時,必須配置設定并構造一個全新的對象。次之,取消裝箱所需的強制轉換也需要進行大量的計算。總之:拆箱和裝箱的計算量比較大,盡量少使用。

6.for循環

int iSum = 1;

        Console.Write("請輸入一個正整數:");

        int j = int.Parse(Console.ReadLine());

        for (int i = 1; i <= j; i++)

        {

            iSum *= i;

        }

        Console.Write("|第一種for循環|");

        Console.WriteLine("從1到{0}的階乘是{1}。",j,iSum);

        iSum = 1;

        int k = 1;

        for (; ; )

        {

            if (k > j)

            {

                break;

            }

            iSum *= k;

            k++;

        }

        Console.Write("|第二種for循環|");

        Console.WriteLine("從1到{0}的階乘是{1}", j, iSum);

 上述兩個for循環的結果一樣,都是求取1到n的階乘。