程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#基礎(四)(C#預定義值類型和引用類型)

C#基礎(四)(C#預定義值類型和引用類型)

編輯:關於C#

一、預定義類型。

1、值類型和引用類型

C#中的數據類型,可以分為值類型和引用類型,值類型存儲在堆棧上,而引用類型存儲在托管堆上。

如下代碼示例,

int i=10;

int j=i;

i和j的值都是10,並且在內存中會有兩個地方存儲10.

再看下面的代碼

Vector x=new Vector();
x.Value=20;
Vector y=x;
Console.WriteLine(y.Value);
y.Value=50;
Console.WriteLine(x.Value);

Vector是一個引用類型,引用類型在使用的時候需要new 來實例化一個。這段代碼執行後,只有一個 Vector對象,x,y都指向包含該對象的內存地址。因為x,y存儲的都是對象的引用,所以當y改變的時候, x也會改變。所以該程序輸出的結果是20和50.

如果變量是一個引用,就可以把其值設置為null,表示不指向任何對象。

2、CTS類型。

C#的預定義類型並沒有內置於語言中,而是內置於.NET Framework中,比如聲明一個int類型時,實際 上是.NET結構System.Int32的一個實例。這說明,可以把所有的基本數據類型看作是支持某些方法的類。

3、預定義的值類型

A、整型

sbyte ,8位有符號的整數,范圍從 -128到127.

byte ,8位無符號的整數,范圍從 0到255.

short,16位有符號的整數,范圍從 -32768到32767

ushort ,16位無符號的整數,范圍從0到65535

int,32位有符號的整數,范圍從-2147483648到2147483647

uint,32位無符號的整數,范圍從0到4294967295

long,64位有符號的整數,范圍從-2的31次方到2的31次方減1

ulong,64位無符號的整數,范圍從0到2的64次方減1

B、浮點類型。

float ,32位單精度浮點數。

double,64位雙精度浮點數。

如果代碼對某個非整數值,如12.3硬編碼,則編譯器一般假定該變量是double,如果想指定其為float ,則可以在後面加上字符f。

C、decimal類型。

該類型是一種財務專用數據類型,是128位高精度十進制表示法。

要把數據指定為decimal類型的,只需在數字後面加上M(或者m)

A、 bool類型。

C#的bool類型包含true和false。

B、 字符類型。

也就是char類型,表示一個16位的unicode字符。

char類型的字面量是采用 單引號 括起來的。而不是雙引號。雙引號括起來的是字符串類型的。

4、預定義引用類型。

A、object類型。

這是C#的基類,所有的類都派生自它。所以,可以使用object引用綁定任何子類型的對象,object類 型執行許多基本的一般用途的方法,如 Equals() GetHashCode(),GetType()等,我們需要針對某些方法 進行“重寫”,這在後面我們將會學習到。

B、string類型。

注意,string類型是屬於引用類型。我們來看下面一段代碼,在修改一個字符串的時候,實際上是創 建了一個新的字符串,而並非修改了原來在字符串。我們來看一個示例:

using System;
using System.Windows;
namespace gosoa.com
{
  class MyFirstClass
  {
    static void Main()
    {
      string str1="GoSoA.com.cn";
      string str2=str1;
      Console.WriteLine("str1="+str1);
      Console.WriteLine("str2="+str2);
      str1="www.GoSoA.com.cn";
      Console.WriteLine("str1="+str1);
      Console.WriteLine("str2="+str2);
    }
  }
}

在這個示例中會輸出

str1="GoSoA.com.cn";

str2="GoSoA.com.cn";

str1="www.GoSoA.com.cn";

str2="GoSoA.com.cn";

這和我們所預期的引用類型正好相反,為什麼呢?

因為當我們用“GoSoA.com.cn”來初始化str1的時候,就在堆上分配了一個

string對象,當初始化str2的時候,也指向了這個對象。當str1改變的時候,並不是修改了原有的對 象,而是新創建了一個對象,但str2還是指向原來的對象,所以,str2的值並未改變。

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