C#是物件導向的語言,在物件導向的思想中,只有對象,所有事物都可以用類別來描述。所以例如這些,int,bool,char,string,double,long等都是類,那麼像,30,2.5,"test"都是對應類別的一個物件。
static void Main(string[] args) { string istring = 30.ToString(); string dstring = 2.5.ToString(); string sstring = "test".ToString(); Console.WriteLine(string.Format("{0},{1},{2}", istring, dstring, sstring)); Console.ReadLine(); }
輸出:
可以看出它們有ToString()這個方法,所以它們是物件。
在平常寫程式碼時,定義資料型別除了上述的這種之外,肯定都用過:
static void Main(string[] args) { Int32 i = 0; UInt32 j = 0; String str = "test"; Console.ReadLine(); }
這個其實是.NET的一個機制,.NET是一個平台,這個平台上有C#,VB這些語言。因此,.NET定義了一系列類型,而映射到不同的語言中,Int32在c#中就是int。這樣的資料類型稱為基元類型,在C#中類別的物件必須使用new生成。而這一部分類別直接就可以用常數表示。基元類型定義在.net Framework中,System命名空間下。看一下基元類型在C#語言中的類型對應。
.NET Framework基元類型 | C#型 | 。 System.Boolean | bool |
/ | System.Byte | byte0 ~255 | |
yst | -128 ~ 127有符號8位元整數 | System.Char | char|
無符號16位元整數 | ~ ,767 | 有符號16位元整數 | |
System.UInt16 | ushort | 0 ~ 65,535 | 無符號16位元整數 |
2,147,483,647 | 有符號32位元整數 | System .Int64 | long |
9,223,372,036,854,7755807 em.UInt64 | ulong | 0 ~ 18,446,744,073,709,551,615 | |
System.Single | float | ||
-45 | ~ ±3.4 × 1038 | (7位元有效數字) 38 | double |
-324 | 到±1.7 × 10308 | (15至16位元有效數字) yst | yst364% decimal |
±1.0 × 10 | -28到±7.9 × 10 | 28(27至28位元有效數)yst f3128位元數位浮點數 任意字串/ | |
uint | 0 ~ 4,294,967,295 | 符號32位元整數 表中的除了string是引用类型(后面单独解释),其它都是值类型。 /// <summary> /// 使用struct定义一个值类型, /// 值类型的只能实现接口,不能继承类 /// </summary> public struct StructPositiveNumber : ICloneable { /// <summary> /// 值类型字段 /// </summary> private int number; /// <summary> /// 静态只读字段,作为类的初始值 /// </summary> public readonly static StructPositiveNumber InitialValue = new StructPositiveNumber(); /// <summary> /// 属性 /// </summary> public int Number { get { return number; } set { if (value <= 0) { throw new Exception(); } this.number = value; } } /// <summary> /// 可以定义构造器,但是和类不同,这里的默认构造器依然存在 /// </summary> public StructPositiveNumber(int value) { if (value <= 0) { throw new Exception(); } this.number = value; } /// <summary> /// 实现克隆方法,返回当前对象 /// </summary> /// <returns></returns> public object Clone() { return new StructPositiveNumber(this.number); } } 登入後複製 调用 static void Main(string[] args) { //声明变量,赋值 StructPositiveNumber pNumber1 = StructPositiveNumber.InitialValue; pNumber1.Number = 1; //pNumber1赋给pNumber2 StructPositiveNumber pNumber2 = pNumber1; //改变pNumber2的值 pNumber2.Number = 2; //看打印结果,改变了pNumber2的值,但是不影响pNumber1 Console.WriteLine(pNumber1.Number);//1 Console.WriteLine(pNumber2.Number);//2 //重新初始化pNumber2,通过构造器生成改变了初始值。 pNumber2 = new StructPositiveNumber(3); Console.WriteLine(pNumber2.Number);//3 //调用Clone将pNumber2复制给pNumber1 pNumber1 = (StructPositiveNumber)pNumber2.Clone(); Console.WriteLine(pNumber1.Number);//3 //改变pNumber1的值,但是pNumber2值不改变 pNumber1.Number = 4; Console.WriteLine(pNumber1.Number);//4 Console.WriteLine(pNumber2.Number);//3 Console.ReadLine(); } 登入後複製 结果 再看引用类型定义的: public class ClassPositiveNumber : ICloneable { private int number; public int Number { get { return this.number; } set { if (value <= 0) { throw new Exception(); } this.number = value; } } //引用类型自己可以初始化为null,无需定义初始值 //public readonly static ClassPositiveNumber InitialValue = new ClassPositiveNumber(); public ClassPositiveNumber(int value) { if (value <= 0) { throw new Exception(); } this.number = value; } public object Clone() { return new ClassPositiveNumber(this.number); } } 登入後複製 调用 static void Main(string[] args) { ClassPositiveNumber cNumber1;//默认值为null cNumber1 = new ClassPositiveNumber(1); ClassPositiveNumber cNumber2 = cNumber1; cNumber2.Number = 2; //可以看出,两个引用引用到了相同的对象 Console.WriteLine(cNumber1.Number);//2 Console.WriteLine(cNumber2.Number);//2 //重新初始化cNumber2,之前的对象已被丢弃 cNumber2 = new ClassPositiveNumber(3); Console.WriteLine(cNumber2.Number);//3 //复制是复制一个对象的副本,因此,是两个不同的对象 cNumber1 = (ClassPositiveNumber)cNumber2.Clone(); Console.WriteLine(cNumber1.Number);//3 cNumber1.Number = 4; Console.WriteLine(cNumber1.Number);//4 Console.WriteLine(cNumber2.Number);//3 Console.ReadLine(); } 登入後複製 结果 通过例子,可以看出值类型的特点如下: 以上就是C#基础知识整理:基础知识(11) 值类型,引用类型的内容,更多相关内容请关注PHP中文网(www.php.cn)!
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
function_exists()無法判定自訂函數
function test() { return true; } if (function_exists('TEST')) { ech...
來自於 2024-04-29 11:01:01
0
2
1807
父視窗沒有輸出
document.onclick = function(){ window.opener.document.write('我是子視窗的輸出'); ...
來自於 2024-04-18 23:52:34
0
1
1559
相關專題
更多>
熱門教學
更多>
|