C#數據類型
C#語言是一種強類型的語言,在程序中用到的變量、表達式、數值等都必須要有類型。對於程序中每一個用於保存信息的量,使用時我們都必須聲明他的數據類型,以便編譯器爲他分配內存空間。C#的數據類型可以分爲兩大部分:值類型和引用類型(常用的2個 String 和 Object)。
由於C#強類型的特點,因此在C#中一種數據類型也就是一個類。比如 整型 int他的真名爲System.Int32();
基本數據類型 (別名) | FCL數據類型(真名) | 說明 |
objesct | System.Objest | 所有其它類型的基類型 |
string | System.String | Unicode字符序列 |
decimal | System.Decimal | 有28位小數的高度精度浮點數 |
bool | System.Boolean | true或false |
char | System.Char | 16位Unicode字符 |
byte | System.Byte | 8位無符號整型 |
short | System.Int16 | 16位有符號整型 |
int | System.Int32 | 32位有符號整型 |
long | System.Int64 | 64位有符號整型 |
ushort | System.Uint16 | 16位無符號整型 |
uint | System.Uint32 | 32位無符號整型 |
ulong | System.Uint64 | 64位無符號整型 |
single(float) | System.Single | 單精度浮點類型 |
double | System.Double | 雙精度浮點類型 |
sbyte | System.Sbyte | 8位有符號整型 |
由上表我們看的出,基本類型直接映射到基類庫中的類型,因此兩者之間可以互換,也就是說我們定義一個int型的變量,
int x = 12; (發現與C/C++定義數據類型類似)
可以寫成這樣: System.Int32 x = new System.Int32(12);
不同的類型定義的範圍也有所不同:
名稱 | 範圍 |
sbyte | -2^7~2^7-1 |
short | -32768~32767 |
int | -2^31~2^31-1 |
long | -2^63~2^63-1 |
byte | 0~2^8-1 |
ushort | 0~2^16-1 |
uint | 0~2^32-1 |
ulong | 0~2^64-1 |
char | 表示一個16位的字符 |
float數據類型用於較小的浮點數,因爲它要求的精度較低。
double數據類型比float數據類型大,提供的精度也大一倍(15位)。在C#編譯器一般默認小數類型爲double類型,
如果想指定該值爲float,可以在其後加上字符F(或f),如:
float f = 12.3F;
decimal類型專門用於進行財務計算,高精度(28位)。
要把數字指定爲decimal類型,可以在數字的後面加上字符M或(m),如:
decimal d=12.30M;
C#變量名命名規則:
1)、由字母、數字或下劃線"_"組成
2)、必須由“字母”或下劃線"_"開頭,不能以數字開頭
3)、不能是c#中的關鍵字 如:int、string、bool、Main、class等
4)、區分大小寫 如:小寫的a 和 大寫的A 是兩個變量
下面就寫個例子吧,要求由用戶輸入 姓名 年齡 身高 工資 性別然後輸出“我的名字是:XX,性別是:XX,今年XX歲,身高是:XX,工資是:XX”
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Example
{
class Program
{
static void Main(string[] args)
{
String name; //定義姓名爲name
char sex; //定義性別
uint age; //年齡(年齡不能爲負數)
double hight; //身高
decimal salary;//工資
Console.WriteLine("你叫什麼名字啊?");
name = Console.ReadLine(); //輸入姓名
Console.WriteLine("你的性別是:");
sex = Console.ReadKey().KeyChar; //寫入性別
Console.WriteLine(); //換行
Console.WriteLine("你多大了?");
age =uint.Parse(Console.ReadLine()); //寫入年齡(uint.Parse()是將讀入的String類型轉爲uint類型,ReadLine() //的返回值是String 類型)
Console.WriteLine("多高啊?");
hight = double.Parse(Console.ReadLine()); //寫入身高
Console.WriteLine("工資多少呀?");
salary = decimal.Parse(Console.ReadLine()); //寫入工資
Console.WriteLine("我叫{0},是個{1}孩子,今年{2}歲了,我的身高是{3}米,工資有{4}元",name,sex,age,hight,salary); //輸出信息
}
}
}
得到的結果是:
唉! 又是這種黑麪框,黑咕隆咚的醜死,以後學了Winform應該會好點吧 !
基於02日記中的輸入與輸出,通過查閱又get了一項新的輸出技能,在上面的最後一行代碼中有 {0},{1},{2}。。。可以有很多個,這一對“{}”叫佔位符,,,(以下是我個人理解)就是我們在程序輸出的時候挖 的一個又一個坑,然後再用第一個參數(“”中的內容是一個String類型的參數,參數與參數之間用逗號“,”隔開)後面的參數按順序去填好 (有點俗阿)。
本着學無止境的探索精神,我又對他進行了一番探索; 當我們用佔位符 的時候一定要按照{0},{1},{2}......這個順序來嗎?我試着改一下還是以上的代碼,,後面的順序改爲這樣 {0},{3},{1},{2},{10}。編譯沒有抱錯但是運行輸出的時候打印不出來,可能就是那個10的問題,原來不能跳着挖坑的,那就這樣 {0},{3},{1},{2},{4},這次沒跳了,交換了順序,編譯沒錯能運行,但是結果是這樣:
完全喪失常理 了 結果亂了。仔細觀察後發現其實那個0,1,2,3,4是 給後面參數編的序號,{}裏面是誰的序號就調用誰。
本着每日三省吾身的好學精神我又有疑惑了,在02日記中我輸出aaa與bbb的時候我用了雙引號 “” 表示字符串,但是如果我想輸出雙引號該咋辦呢?想了好久,去網上查了下才知道 可以用\加符號就可以輸出啦,於是我寫了個不要臉的程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Example
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("女神對我說:\"I Love You!!!\"");
}
}
}
結果是:
(哈哈,,沒羞沒臊的)總之 雙引號是成功輸出來了
本着做一個勇於探索的人,我又發現:輸出雙引號的時候我用 \ 來不讓他轉義 ,那要是我想輸出 \ 該咋辦呢?
可能是在 \ 前面再加個 \ 試了下沒錯 \\能夠 輸出 \ 所以要輸出\\就得 寫\\\ 以此類推 感覺挺麻煩的,於是又找了個一勞永逸
的方法 “@" ,,,Console.WriteLine(@"\\\");
結果輸出 \\\ 不變