這是引我入門的一個博客主(我很喜歡)的文章 這是他的博客:http://www.cnblogs.com/tonney/archive/2011/03/16/1986456.html
一、 C#與.Net的關系
C#是一種相當新的編程語言。C#的重要性體現在以下兩個方法:
1)、它是專門為Microsoft的.net FrameWork一起使用而設計的 (.net FrameWork是一個功能非常豐富的平台,可開發,部署和執行分布式應用程序)
2)、它是一種基於現代面向對象設計方法的語言,它在設計它的時候,Microsoft還吸取了其他所有類似語言的經驗,這些語言是近20年面向對象規則得到廣泛應用后才開發出來的。
有一個很重要的問題要弄明白:C#就其本身而言只是一種語言,它本身不是.net本身的一部分。.net支持的一些特性,C#並不支持,而C#語言的另一些特性,.net卻不支(如運算符重載).因為C#和.Net一起使用,所以如果要使用C#高效的開發應用程序,理解Framework是非常重要.這里我就不再詳談了。
二、了解C#的一些基礎
1、 c#在向控制台輸出語句
語言 |
輸入語句 |
|
|
輸出不換行 |
輸出換行 |
C# |
Console.Write() |
Console.WriteLine() |
2、轉義換行
語言 |
轉義符 |
|
|
換行 |
空8個空格 |
|
\n |
\t |
c# |
Console.Write("我\n你"); |
Console.Write("成績:\t"); |
3、c#接收用戶在控制台輸入的資料
語言 |
等待用戶輸入 |
|
c# |
Console.WriteLine("請輸入密碼:");
|
Convert.ToXX(Console.ReadLine());//這里的xx可以為int、double等
注:這里我們不能使用(int)xx這種隱式轉換。string不能直接轉為數字類型
|
4、關於 XX.Parse()用法需要注意
XX.Parse(); 這里的XX可以是 int、double、bool等
它的用途是:把字符串轉換為其它類型
下面的語法都是錯誤的:
int.Parse(“我和你”); 不行,因為“我和你”不是有效的數字
int.Parse(123); 不行,必須是字符串
int.Parse(“123.45”); 不行,因為”123.456”是小數,所以不能轉換為整數
5、認識C#的三種注釋
快捷鍵(vs2012)
Ctrl+K+C 選擇多行代碼注釋
Ctrl+K+U 取消多行代碼注釋
Ctrl+E+C 選擇多行代碼注釋
Ctrl+E+U 取消多行代碼注釋
語言 |
注釋 |
||
|
單行注釋 |
多行注釋 |
文檔注釋 |
c# |
//… |
/* |
/// ///… /// |
在實際的開發過程中,這三種注釋都要用到,因為它便於讓其他開發人員了解你做此程序的目的或者某一段代碼的用法及定義這個變量是干什么用的。
注: 我也會在我的隨后的隨筆中總結一篇vs2012的快捷鍵的操作
6、Console.WriteLine()的語法格式(3種)
1)、 Console.WriteLine(); //輸出一行
2)、Console.WriteLine(要輸出的值);
3)、Console.WriteLine(“格式化字符串”,變量列表);
說明:{0}:占位符
依次使用{0}、{1}、{2}...與變量列表中的變量對應
下面是一個使用"+"拼接 和 使用格式化字符串輸出結果的對比:
語言 |
|
格式化字符串 |
c# |
int a=2; |
int a=2; 結果:2+3=5 |
可能剛開始,有些初學者還不太習慣使用占位符的形式,但是以后你以后你就會慢慢發現,格式化字符串的強大功能之處。現不在這里多加描述。
把a的值賦值給占位符{0},把b的值賦值給占位符{1},以此類推
可能剛開始,有些初學者還不太習慣使用占位符的形式,但是以后你以后你就會慢慢發現,格式化字符串的強大功能之處。現不在這里多加描述。
案例:使用格式化字符串來拼接一句話:
__心__意,__心__意,__ 羊__泰
Console.WriteLine(“{0}心{0}意,{1}心{2}意,{1}羊{3}泰”,
”一”, ”三”, ”二”, ”開” )
那么請您思考一下占位符{0}、{1}、{2}、{3}分別代表什么?
最后,請大家打開VS工具,試着用"+"拼接符 和 使用 格式化字符串來進行制作以下小程序
題目: 輸入姓名和年齡,輸出結果
C#基礎--之數據類型
在第一章我們了解了C#的輸入、輸出語句后,我這一節主要是介紹C#的基礎知識,本節的內容也是后續章節的基礎,好的開端等於成功的一半。在你閱讀完本章后,你就有足夠的C#知識編寫簡單的程序了。但還不能使用繼承或其它面向對象的特征。
本章主要針對以下幾個部份來進行講解:
1、電腦是由什么來存儲所使用的數據?
2、基本數據類型有哪些?
3、如何聲明變量和賦值?
4、變量和常量的區別?
5、不同數據類型之間是如何轉換的?
下面,我們現一個一個的來了解這些問題。
一、電腦是由什么來存儲所使用的數據?
這個問題用一句話比較籠統的概括,那就是:電腦使用內存來記憶計算時所使用的數據。
在現實生活中的數據各種各樣,整數、小數、字符串、字符等等,它們都類型是不一樣的,所以你要想在計算機中使用這些類型,就必須在內存中為它申請一塊合適的空間。
那有哪些數據類型是C#能使用的呢?我們一起來看一看.
二、基礎數據類型有哪些
首先要了解一點:C#認可的基礎數據類型並沒有內置於C#語言中,而是內置於.net Framework中。
如,在c#中聲明一個int類型的數據時,聲明的實際上是.net結構System.Int32的一個實例。這聽起來似乎很深奧,但其意義深遠:這表示在語法上,可以把所有的基礎數據類型看作是支持某些方法的類。
類型實際上仍存儲為基本類型。基本類型在概念上用.Net結構表示,所以肯定沒有性能損失。
下面大家一起來了解一下C#中定義的內置類型,我們將列出每個類型,以及它們的定義和對應的.net類型(CTS類型)的名稱。
c#有15個預定義類型,其中13個是值類型,兩個是引用類型(string 和 object)
1、整型
2、浮點類型
float數據類型用於較小的浮點數,因為它要求的精度較低。
double數據類型比float數據類型大,提供的精度也大一倍(15位)。
如果在代碼中沒有對某個非整數值(如12.3)硬編碼,則編譯器一般假定該變量是double。
如果想指定該值為float,可以在其后加上字符F(或f),如:
float f = 12.3F;
3、decimal類型
decimal類型專門用於進行財務計算,使用decimal類型提供的28位的方式取決於用戶。
要把數字指定為decimal類型,可以在數字的后面加上字符M或(m),如:
decimal d=12.30M;
4、bool(布爾)類型
5、char字符類型
char類型的字變量是用單引號括起來的。 如'A'
如果把字符把在"A"(雙引號)內,編譯器會把它看作是字符串,從而產生錯誤。
6、引用類型(Object類型和字符串類型)
三、如何聲明變量和賦值?
1、變量的定義:是指在程序的運行過程中隨時可以發生變化的量
2、上面我們提到,變量在運行時當中是存在內存當中的,它是一個臨時的存放場所。
那么在內存當中,可以存放如數字、字符串、日期等等各種類型的數據。
![]() |
大家可以看一看這張圖,它就把表示內存當中的一個狀態。
簡單的來說,變量就是表示內存當中的一塊存儲區域。
它會對應一個唯一的內存地址,但是我們在使用程序當時候,內存地址不好理解也不好記憶。 那么怎么辦呢?
在日常生活當中我們都有一個名字,如"張三“、”李四“等,這些名字就是為了便於記憶。 那么同樣,在程序當中,為了區別多個變量,那就需要為每個變量賦值一個簡短,便於記憶的名字, 這就是變量名。 |
3、 C#中的變量的命名是是有規則的:
1)、由字母、數字或下划線"_"組成
2)、必須由字母或下划線"_"開頭,不能以數字開頭
3)、不能是c#中的關鍵字 如:int、string、bool、Main、class等
4)、區分大小寫 如:小寫的a 和 大寫的A 是兩個變量
4、做為一個比較好的學習者,就必須遵守一些變量命名規范:
1)、變量的名字要有意義,盡量用對應的英語命名,具有“見名知意“的作用。
如:姓名 變量取名為 name 或者 用拼單 xingMing,避免用a,b,c來進行命名。
2)、避免使用單個字符作為變量名( 除在循環里面定的變量)
3)、當使用多個單詞組成變量名時,應該使用駱駝(Camel)命名法
駱駝(Camel)命名法:第一個單詞的首字母小寫,其它單詞的首字母大寫,如:myName,myAge
C#基礎--運算符及條件控制語句
上一章我們了解了C#的一些數據基本類型、如何定義使用變量及類型之間的相互轉換。可能大家會發現程序只能按照我們的要求從上向下這樣順序一條一條的執行。
那么程序能按照我們的要求,當某個條件成立的時候才執行呢?答案是肯定的,因為程序中有這樣的流程語句。
那么我們本章講像大家講解一下C#的運算符及條件控制語句。
本章主要針對以下幾個部份來進行講解:
1、算述運算符
2、關系運算符
3、邏輯運算符
4、條件語句
5、分支語句
一、算述運算符
程序中所運用的算術運算符跟我們平常日常生活中接觸的算術也一樣。主要分為:
加、減、乘、除、 模(求余數)
+、 -、 *、 /、 %
兩個數的運算如下:
int a=5,b=6;
int c=a+b;
//程序首先定義兩個整型變量a和b,並對它們賦初始值,a為5,b為6
//那么現在計算兩個數的和,把它們的和放到另外一個變量c當中,所以c的值為11;
主要是除和模(求余數)的計算,可能很多人剛開始還不太習慣。
int a=15,b=3;
int c=a/b; //這里求15/3,所以c的值就是5
int d=a%5; //這里求15/3的余數是多少,所以d的值就是0,因為15/3商5,余0
下面來制作一個案例:交換兩個數的位置,如int a=5,b=3; 現在要把它變為 a=3,b=5;
這里有幾種做法:
第一種常見做法是:在內存中再申請一個變量c,把a的值賦值c,
然后再把b的值賦值給a,最后把c的值賦值給b; (圖解)
代碼如下:
int a=5,b=3;
int c=a;
a=b;
b=c;
圖1 |
圖2 |
![]() |
![]() |
圖3 |
圖4 |
|
![]() |
第二種做法:
int a = 5, b = 3;
b = a+b-(a=b);
這種做法是在兩個變量中進行的,首先要理解它的算法。
![]() |
首先看圖,這種寫法可以很多人沒有看到過。我們只知道=號代表賦值運算,能這樣在與算術運算中,程序居然不會報錯,真的是奇跡。 那么如何能這樣寫,程序運算的順序又是怎么樣的呢?看圖,程序運算的過程為: (1)、a+b,得到的結果是8 (2)、a=b,把b的值3賦值給變量a,所以現在a=3; (3)、由圖(1)-圖(2)為,8-3=5,最后把5賦值給變量b 這樣,就在不增加變量的情況下,交換了兩個數字。 |
二、關系運算符
我們先來看一看日常生活中和C#程序中關系運算符的區別。
從上圖可以看出,除了等於與不等於寫法不一樣外,其它的都一樣。
在我們日常生活中經常會用到這些符號,現在只不過是用程序的方法把它實現。
如:2>3 , 4< 6 , 5==5 , 6!=7, "我"=="我"
在程序中,這樣的判斷得出的結果只有兩種:一種是成立,一種為不成立。
在C#中有一種變量可以存儲這樣的值,它就是布爾(boolean或bool)變量。
bool類型只有兩個值,true代表成立,false代表不成立
如:
bool a=3>4; 結果是:false(不成立)
bool b=(4==4); 結果是: true(成立)
三、邏輯運算符
用一句話連貫的英語單詞來形容程序中的邏輯運算符,那就是not and or (如圖):
用一句話連貫的中文來形容程序中的邏輯運算符,那就是與或非 (如圖):
邏輯運算符是用在當要判斷多個條件是否滿足時的情況下使用。&&和 || 是有區別的
&& [and] :當所有的條件都滿意成立的時候,才成立
|| [or] :當有一個條件成立時,就成立。
如圖:
邏輯與 |
邏輯或 |
![]() |
|
注意:在算術運算符、條件[比較]運算符、邏輯運算符和賦值運算符中,程序運行的先后順序是:
! > 算術運算符 > 條件[比較]運算符 > && > || > =
由此可見:
邏輯運算符中的非 ! 運算符最高
算術運算符第二
條件[比較]運算符第三
邏輯運算符中的與 && 第四
邏輯運算符中的或者 || 第五
最后,賦值運算符(=)運算的級別最低
四、條件語句
在我們日常生活中,經常會問題這樣的問題,如:
如果今天是星期天,我們就去看電影。
假如我買的彩票中了五百萬,我就去渡假。
如果我有一輛車,我就開車去旅游等等。
像這樣假設的條件,如果成立就做某些事情,在我們程序中有一專門的語句去實現它,那就是條件結構語句。
條件程序語句大概分為5大類,分別為:
(1) 簡單if (2)if else (3)嵌套if (4)多重if (5)switch條件分支語句
1、 首先,我們先來看一看簡單if 其語法為: |
|
if(條件語句) { } |
如:如果我中了五百萬,我就去渡假。 int money=5; if(money>=5) { Console.WriteLine("我中了五百萬,我要去渡假。"); } |
2、 我們先來看一看if else結構 其語法為: |
|
if(條件語句) { } else { } |
如:如果我中了五百萬,我就去渡假,否則我就繼續支持福彩票事業。 int money=5; if(money>=5) { Console.WriteLine("我中了五百萬,我要去渡假。"); } else { Console.WriteLine("繼續支持福彩事業。"); } |
3、 我們先來看一看嵌套if結構(也就是if里面套if) 其語法為: |
|
if(條件語句) { if(條件語句) { } else { } } else { if(條件語句) { } } |
如:
|
選擇題:以下變量命名正確的是( )
A、name、 _222*1、 9class、 public
B、_teacher、 void、 string、 myName
C、$Age、 corss、 fire、 _grade
D、_glass、 g23、 c_12、 my_first_2
5、變量的聲明和賦值
1)定義變量的語法:
數據類型 變量名; (定義一個年齡的變量,年齡是整數,所以變量定義如下:)
int age; [系統會根據數據類型,在內存中分配不同大小的存儲空間]
每個數據類型后面,可以定義多個變量,如:(定義姓名、家庭地址、籍貫、民族)
string name,address,origin,national ;
2)為變量賦值語法:
變量名 = 值;
(這里的=號表示賦值運算符,把=號右邊的值,賦值給左邊的變量名,最后以一個;[分號]結束)
如:年齡18歲,姓名為“小張",家庭地址為“重慶南坪XXX",
籍貫為“重慶",民族為“漢"
age = 18 ;
name = "小張" ;
address = "重慶南坪XXX" ;
origin = "重慶" ;
national = "漢" ;
四、變量和常量的區別
變量:是指在程序的運行過程中隨時可以發生變化的量
常量:是指在程序在運行過程中不會發生變化的變量
常量的特點:
1、必須在聲明是賦值
2、不能在在程序運行時,給常量賦值
3、常量是靜態的。不必須(實際上,是不允許)在常量聲明中包含修飾符static
五、不同數據類型之間是如何轉換的
在C#中數據類型轉換分為兩種:1)隱式[又叫自動]類型轉換 2)顯式[又叫強制]類型轉換
舉個簡單例子:
飛機場里面停飛機,這是理所當然,我們把這種叫做隱式[又叫自動]類型轉換
那如果我們反過來看一看,飛機里面裝飛機場,這個在我們實際生活中,覺得這是根據不可能的,
但是程序可能做到這一點,我們把這種叫做顯式[又叫強制]類型轉換
在C#中數據類型轉換分為兩種:1)隱式[又叫自動]類型轉換 2)顯式[又叫強制]類型轉換
舉個簡單例子:
飛機場里面停飛機,這是理所當然,我們把這種叫做隱式[又叫自動]類型轉換
那如果我們反過來看一看,飛機里面裝飛機場,這個在我們實際生活中,覺得這是根據不可能的,
但是程序可以做到這一點,我們把這種叫做顯式[又叫強制]類型轉換
double和int之間就是(飛機場與飛機)這種關系,我們可以這樣理解,double的取值范圍比int要大得多
所以double可以裝得下int :
int a=1234;
double b=a; 系統會把a整型變量的值賦值給double變量b.這就是隱式[又叫自動]類型轉換
那反過來:
double a=1234;
int b=a; //系統編譯時會報錯,如圖:
那如何進行強制轉換呢?c#提供了非常簡便的方法,如:
double a=1234;
int b=(int)a; //這樣就強制把double類型,轉換為int類型
最后,再介紹一下,其它數據類型之間的轉換(1、字符串轉換為其它類型 2、任意類型之間的轉換)
1)、字符串轉換為其它類型
語法:
XX.Parse(字符串); 這里的xx代表的如:double,int,bool等
舉個例子來說明一下:
string strValue="123.45"; //這是一個字符串,時面的值是"123.45"
現要把它轉換成小數類型,就可以使用double.Parse();來進行轉換
double dValue=double.Parse(strValue);
2)、任意類型之間的轉換
語法:
Convert.ToXX(任何類型);
如:把一個布爾類型轉換為整型
bool a = true;
int b = Convert.ToInt16(a);
Console.WriteLine("轉換后的結果是:"+b); //轉換后的結果是:1
ok, 經過以上的學習,我相信大家對C#的一些基礎知識有一定的了解,那么下一章我將介紹C#的算術運算符、邏輯運算符、關系運算符,以及控制程序流的語句。
值類型和引用類型,棧和堆的含義
本文主要是討論棧和堆的含義,也就是討論C#的兩種類據類型:值類型和引用類型;
雖然我們在.net中的框架類庫中,大多是引用類型,但是我們程序員用得最多的還是值類型。
引用類型如:string,Object,class等總是在從托管堆上分配的,C#中new操作符返回對象的內存地址--也就是指向對象數據的內存地址。
以下是值類型與引用類型的表:
我們來看下面一段代碼:
首先在類中聲明一個class類,和一個struct結構,如圖:
並使用在程序入口調用它們,如圖:
現在我們來看一看,它們在內存當中是如何存儲的?
從這張圖可以看出,class(類)實例化出來的對象,指向了內存堆中分配的空間
struct(結構) 實例化出來的對象,是在內存棧中分配
接下來,我們再來在上面的程序做如下修改:
紅框,代碼定義一個class實例化對象s2,然后把對象s1賦值給s2
藍框,代碼定義一個結構實例化對象r2,然后把對象r1賦值給r2
那它們輸出的結果是多少呢?請選擇( c )
A、 s1的值為:12 s2的值為222
r1的值為:16 r2的值為666
B、 s1的值為:12 s2的值為222
r1的值為:666 r2的值為666
C、 s1的值為:222 s2的值為222
r1的值為:16 r2的值為666
D、 s1的值為:222 s2的值為222
r1的值為:666 r2的值為666

所以,值類型和引用類型的區別就是:
1、它們存儲的位置不一樣
2、如果是引用類型,當兩個對象指向同一個地方,修改某一個的時候,其它對象的值會發生改變
面向對象基礎(一)
我想在這個園子里面的新人,還是"掌門人",都對"面向對象"這幾字非常的耳熟了或者有一定的了解。
但當一個初學都在學習面向對象的時候,會遇到一些瓶頸和麻煩,認為面向對象非常的難以理解。
那么本章節主要是讓大家了解面向對象,並系統地掌握面向對象編程的技能點,消除初學者的疑惑.
1、 如何去學習面向對象的編程?
2、 需要掌握的有哪些技能點?
一、如何去學習面向對象的編程?
首先要想要學習好面向對象編程,那么你就必須把一切的事物都能想到它的一些特性和行為。
如:現在你現在看到本篇的文章,你會想到什么?我想大部份人都會說,看到的是文字。
但是對於一個面向對象的編程者來說,它看到的應該是比文字還要多的東西。
如:字體的顏色、字數、文字的大小、文字的樣式、文字的粗細,等等。。。。。
建議大家去youku上面去搜索一下,去搜索一下印度的“這個真牛"的視頻,也許會對你的認識有幫助。
二、學習OOP需要掌握的有哪些技能點?
我用一個圖來描述一下,大家首先必須要掌握的知識點
在圖中,分別列出面向對象的三大特性
1、封裝的特點:
1)、隱藏代碼的實現,便於用戶調用
2)、讓代碼與實現相分離
3)、在類的內部實現自由的修改
2、繼承的特點:
減少重復的代碼,便於程序的維護
3、多態的特點:
表示不同的對象在執行相同的動作的時候,通過自己內部來執行
想必大家對面向對象的三大特性,都非常了解,我這里只是簡單的描述了一下。
請大家先了解一下,那么下一章,我們就開始面向對象的第一步,了解什么類和對象.