C#編程自學之數據類型和變量一。本站提示廣大學習愛好者:(C#編程自學之數據類型和變量一)文章只能為提供參考,不一定能成為您想要的結果。以下是C#編程自學之數據類型和變量一正文
1、數據類型與變量的引見
在法式運轉的進程上鉤算機須要記載年夜量的狀況 數據(這裡我們統稱數據)。那這些數據都寄存在哪呢?法式在運轉進程中的數據普通都寄存在內存。那末他們在內存中若何寄存的一種描寫就是數據類型。變量則就是數據類型的實體。那末我們來看一個例子: 假設如今須要設計一個法式盤算整數 10 與 20 的和, 請看以下代碼:
using System; namespace MyProgram { class Program { static void Main(string[] args) { //變量的界說格局: //數據類型 變量名 賦值運算符 值 int a = 10; // 界說一個整數類型的變量a 並賦值10 int b = 20; // 界說一個整數類型的變量b 並賦值20 int c = a + b;//界說一個整數類型的變量b 賦值為 a + b 的和 Console.WriteLine("10 + 20 = "+c.ToString());//打印成果 } } }
剖析: 起首要盤算整數10與20的和,確定須要有處所來放(在內存中存儲)它們,既然盤算整數那末我們就用整數的數據類 型int 界說名字為a 和 b的變量來分離寄存10 和 20,在經由過程加法運算符將和寄存在變量c中。挪用我們之前懂得過的掌握台類將成果輸入到掌握台顯示出來,這裡要留意c.ToString(), 由於我們盤算的是整數,所應用變量的類型都是整數,而掌握台輸入的是字符串,所以我們須要將挪用int類型的一個行動ToString()將本身轉換為字符串類型!這部門將在數據類型的第三篇中引見!
2、C#根本數據類型與變量
1.數據類型
C#的數據類型分為兩類:一種是值類型 一種是援用類型 (值類型與援用類型將在數據類型的第二篇中引見),那末我們來看看C#的經常使用數據類型。
2.匿名類型
懂得C#經常使用的基本數據類型今後,我們在來看看匿名類型,甚麼是匿名類型呢?
匿名類型:匿名類型就是在變量初始化後依據所賦的值來斷定它屬於哪一個類型。不明確沒緊要,舉個例子:
using System; namespace MyProgram { class Program { static void Main(string[] args) { int a = 20; //界說一個整數類型的變量 char b = 'A';//界說一個字符類型的變量 var _intType = 20; //界說一個匿名類型的變量 給賦值一個整數數字 20 var _charType = 'A'; //界說一個匿名類型的變量 給賦值一個字符 A Console.WriteLine(" a 的數據類型為:{0}",a.GetType().ToString()); //打印出變量a的數據類型 Console.WriteLine(" b 的數據類型為:{0}", b.GetType().ToString()); //打印出變量b的數據類型 Console.WriteLine(" _intType 的數據類型為:{0}", _intType.GetType().ToString());//打印出變量_intType的數據類型 Console.WriteLine(" _charType 的數據類型為:{0}", _charType.GetType().ToString());//打印出變量_charType的數據類型 } } }
起首看 9 ~ 10行,界說了一個整數類型的變量a賦值為20和一個字符類型的變量b為賦值為A,那末 a與b的數據類型分離為整數類型(System.Int32與System.Char).
接著看 12 ~ 13行,界說了兩個匿名類型的變量為: _intType,_charType,分離給 _intType賦了一個整數的值為20,給_charType賦了一個字符為A。在法式運轉之前編譯器會根絕變量所賦的值來主動斷定數據類型。
法式履行成果以下:
提醒:匿名類型變量在編譯後肯定數據類型以後,在法式感化域內該變量的數據類型弗成轉變!
3.變量與變量的感化域
變量:經由下面的例子與引見應當曾經對變量不生疏了,變量就是數據類型的實例。真正用來寄存數據的內存空間或寄存數據內存空間地址。
感化域:感化域就是法式應用該變量的一個規模。普通變量感化域的界限是由符號{與}來規定界線的,也就是說在{}內界說的變量,就只能在{}外部來挪用。
C#的感化域可分為兩種級別:
1.類屬性級別:當變量界說為類的屬性是,變量的感化域為全部類的外部可拜訪。
2.部分級別:當變量被界說在辦法或許語句塊中,變量的感化域為比來的{}之間可拜訪,部分級其余變量必需初始化。
關於感化域的成績:
1.當一個類界說的變量(屬性)與該類辦法中界說的部分變量重名時會怎樣樣?
答:以後感化域中的變量與下級感化域中的變量重名時,以以後感化域中的變量為准。
2.當一個類界說的變量(屬性)重名或許類辦法中界說的部分變量重名時會怎樣樣?
答:統一個感化於中不克不及湧現雷同稱號的變量
參考代碼:
class MyClass { int a = 10; public void MyMethod() { int a = 20; //辦法外部變量與類屬性變量 a同時湧現時, 以以後辦法內(感化域的變量為准) Console.WriteLine("a:{0}",a); //輸入成果為20 int a = 30; // 編譯毛病,統一個感化域內弗成以湧現雷同稱號的變量 } }
3、數據類型默許值與初始化
C#中類界說屬性可以不消初始化,那末他們的值分離是甚麼呢? 未賦值的變量會被主動付與一個適合的默許值。
例如:
int 類型(數值類型)默許值為0
bool 類型 默許值為false
char 類型 默許值為 ‘\0'
我們還可以在界說類屬性是就初始化他們的值,也能夠經由過程類的結構函數來初始化類屬性
class MyClass { public int a = 10; //第一種初始化辦法在界說是就賦值 public bool b; //默許值為false public MyClass(bool c) { b = c; //經由過程結構函數初始化類屬性 } } class Program { static void Main(string[] args) { MyClass mc = new MyClass(true);//經由過程結構函數傳入true 賦給參數bool類型變量c = true Console.WriteLine("mc->a :{0}", mc.a.ToString()); Console.WriteLine("mc->b :{0}",mc.b.ToString()); } }
輸入成果以下:
4、靜態變量
靜態變量就是經由過程類級別去挪用,無需創立類型的對象便可以用的變量。
靜態變量症結字: static
界說格局: [static 數據類型 變量名]
實例代碼:
using System; namespace MyProgram { class MyClass { public int a = 10; //變量a為對象級別屬性 public static int b = 20; //變量b為類級別屬性 } class Program { static void Main(string[] args) { MyClass mc = new MyClass(); int a_Mc = mc.a; //變量級別須要創立對象MC後經由過程MC(對象)來拜訪 int b_MyClass = MyClass.b; //類屬性可直接經由過程類名拜訪無需創立對象 Console.WriteLine("mc->a :{0}", a_Mc); Console.WriteLine("MyClass->b :{0}", b_MyClass); } } }
運轉成果以下:
5、常量
常量就是不克不及被轉變的變量,常量只能界說在類屬性級別,常量也必需是靜態的,而且在界說時就初始化賦值,常量一旦被初始化後就弗成以在轉變,任何對常量轉變語句都將惹起編譯器毛病。由於常量界說時就要賦值所以常量類型只能聲明給值類型(值類型與援用類型下篇講授)。
常量的界說格局: [const 數據類型 變量名]
代碼:
using System; namespace MyProgram { class MyClass { public const int a = 10; //界說常量a public const bool b = false; //界說常量b } class Program { static void Main(string[] args) { int a_Const_MyClass = MyClass.a; //常量必需是靜態的,經由過程類名拜訪 bool b_Const_MyClass = MyClass.b; //常量必需是靜態的,經由過程類名拜訪 Console.WriteLine("MyClass->a_Const :{0}", a_Const_MyClass.ToString()); Console.WriteLine("MyClass->b_Const :{0}", b_Const_MyClass.ToString()); //任何試圖修正常量的舉措都邑惹起編譯毛病 MyClass.a = 20; MyClass.b = true; } } }
准確操作運轉成果以下:
修正常量提醒毛病以下:
6、只讀與靜態只讀
回想下常量在聲明時必需初始化賦值,那末假如我想在運轉的時刻才賦值怎樣辦?那末不消怕C#為我們供給了只讀類型症結字為:readonly ,只讀類型跟常量相似也是賦值後就弗成以轉變,但與常量分歧的是它不是強迫靜態的,也就是只讀類型是對象級別來拜訪的。
只讀類型界說方法:[readonly 數據類型 變量名]
那末若何讓他成為靜態的? 很簡略在後面我們曾經引見過靜態的症結字static
靜態只讀類型界說方法:[static readonly 數據類型 變量名]
代碼:
using System; namespace MyProgram { class MyClass { public readonly int a = 10; //界說只讀變量a public static readonly bool b = false; //界說靜態只讀變量b } class Program { static void Main(string[] args) { MyClass mc = new MyClass(); int a_ReadOnly_MC = mc.a; //只讀變量長短靜態的,由對象級別拜訪 bool b_StaticReadOnly_MyClass = MyClass.b; //靜態只讀變量是類級別變量,有類名拜訪 Console.WriteLine("a_ReadOnly_MC : {0}",a_ReadOnly_MC); Console.WriteLine("b_StaticReadOnly_MyClass :{1}", b_StaticReadOnly_MyClass); //任何對只讀類型的修正都將惹起編譯毛病 mc.a = 20; MyClass.b = true; } } }
准確操作運轉成果以下:
修正只讀變量毛病以下:
7、須要留意的細節
1.變量感化域能否可以湧現雷同變量名?
答:雷同感化域時,變量弗成以重名,在以後感化域與下級感化域的變量重名時,以變量地點感化域為主。
2.常量能否可以在對象級別拜訪?
答:常量弗成以在對象級別拜訪,常量默許為靜態的,由類級別拜訪。
3.常量(const)與(readonly)只讀的差別?
答:雷同點:是都是賦值後就弗成以轉變,
分歧點:
1.Const 必需在聲明時就賦值,readonly 可以在初始化進程中賦值.
2.Const只可以潤飾值類型,而readonly可以潤飾隨意率性類型.
3.Const是類級別拜訪,readonly是對象級別拜訪
以上講授的類的屬性都代表成員變量,願望對年夜家的進修有所贊助。以後還有相干文章持續更新,願望年夜家持續存眷。