標籤:
經過這幾天的學習,真的有點覺得以前C學的太不好現在學C#也不順暢,雖然很多東西都似曾相識,但是就是還得看好幾遍才能記得住,而且現在都是簡單的東西,還沒有看到重載等稍微痛點的地方。應該好好努力了,昨天忙完所有事情都十一點多了,還被學姐罵的不行不行的,就早點休息了,真是應該每天都能看一點的,這樣還能記得深刻一點,每天都能學點東西還能有點成就感。據說養成一個習慣需要至少23天,我真的還想試一下是不是真的,其實寫部落格的目的就是督促一下自己,每天給自己來點壓力,不要像大一的時候一樣一事無成,成天忙那些所謂的學生工作,付出的太少太少,希望找到高中時的狀態,周圍的環境都不是理由,時間緊也不是理由,現在唯一讓我感到很煩的就是導員的博士論文,我學了好幾年的理科,大學學的還是工科,成天還要寫思想政治教育的稿子,想想都有點不值得,不過只能在自己的部落格裡吐槽一下了,畢竟要導員幫忙的地方太多了。這樣是不是太勢利了呢?我也常常在想,直接撂挑子不幹算了,愛咋咋地。但是想想已經付出了那麼多,到今年12月份也就解放了,也就忍了,真心希望以後不會有這種奇葩的任務了,自己做點自己想做的、想學的,摞摞代碼、學學單片機、搞搞嵌入式就挺好。不說廢話了,還是說說今天的學習吧!突然好多感慨。。。但是,我的部落格我做主,哈哈哈哈。
今天自己看了點逸出字元那塊,和C差不多,基本一樣,也就不贅述了,就是多了個@的那個功能,變數名的第一個字元必須是字母、底線或數字。變數的命名方面,主要有兩種主流的命名方式,一種是camelCase方式,舉幾個例子就明白了,age,firstName,timeOfDeath(這個名字咋這麼嚇人呢),就是第一個字母不大寫,其他出現的單詞首字母都要大寫;還有一種是PascalCase方式,看名字就能看得出來,比上一個命名方法多了首字母大寫,好像我們老師以前講C語言的時候說過一種匈牙利命名法和第二種挺像的,不知道是不是一種。對於這兩種命名方式,官方給出的說法是,對於簡單的變數,用第一種比較好,對於複雜的,就用第二種,不過個人還是比較傾向第二種。
就下來就說下@的用法了,可以有效簡化代碼,減少逸出字元的使用,使代碼更加簡潔。在這裡舉個例子應該就能很明白的說清楚了,不用@的話對於以下字串“C:\\MyDir\\Myfile.doc”就可以簡化成@“C:\Mydir\Myfile.doc”當然使用這種方法也有意外,比如說在字串裡本身存在雙引號的話還是必須要轉義,以免結束字串。接下來再說一下一個基本的東西,資料類型的轉換:隱式轉換和顯式轉換,所謂隱式轉換,就是悄悄的轉換,不需要做任何工作,不需要任何的代碼,這裡就不多說了,以後應該不會在這地方卡殼。重要的是顯式轉換,在明確要求編譯器把數實值型別進行轉換時,就是在執行顯式轉換。簡單的顯示轉換格式是<(destinationType)sourceType>,這樣就將sourceVal值的資料類型就變成了前面括弧裡的情況。代碼還是要摞起來
byte destinationVar;
short sourceVar = 7;
destinationVal=(byte)sourceVar ;
Console.WriteLine("sourceVar val:{0}",sourceVar );
Console.WriteLine("destinationVar val:{0}",destinationVar );
就可以得到
sourceVar val:7
destinationVar val::7
雖然代碼很簡單,還是要敲出來,印象能深刻一些,畢竟在打基礎。但是如果資料過大就是有溢出的情況,比如說上例中的short類型值是281,結果就會是25,進行了迴圈,因為byte類型最多能夠表達的數就是255.所以在資料類型轉換的時候要注意不同資料類型的範圍大小。為了防止溢出,可以添加check函數來進行溢出檢查,如果溢出就會有程式崩潰的提示。除了這一種方式,還有另一種稍微複雜一點的轉換,運用convert進行轉換。不說其他,直接上代碼:
static void Main(string[] args) //和java真他媽像
{
short shortResult,shortVal=4;
int integerVal=67;
long longResult;
float floatVal=10.5F;
double doubleResult,doubleVal=99.999;
string stringResult,stringVal="17";
bool boolVal=true;
Console.WriteLine("Variable Conversion Examples\n");
doubleResult=floatVal*shortVal;
Console.WriteLine("Implicit,->double:{0}*{1}->{2}",floatVal,shortVal,doubleResult);
shortResult=(short)floatVal;
Console.WriteLine("Explicit,->short:{0}->{1}",floatVal,shortResult);
stringResult=Convert.ToString(boolVal)+Convert.ToString(doubleVal);
Console.Write("Explicit,->string:\"{0}\"+\"{1}\"->{2}",boolVal,doubleVal,stringResult);
longResult=integerVal+Conver.ToInt64(stringVal);
Console.WriteLine("Mixed, ->long: {0}+{1}->{2}",integerVal,stringVal,longResult);
}
碼完這段讓人吐血的代碼,好無聊,但是該練習的還是要練習,這點逃不了。
接下來就說複雜的變數類型之一:枚舉。
直接上代碼:
enum<typeName> //定義枚舉
{
<value1>
<value2>
...
<valuen>
}
<typeName><varName>; //聲明新變數
<varName>=<typeName>.<value>; //賦值
還可以添加類型:
enum<typeName> :<underlyingType> //定義枚舉,並且在後面設定儲存類型
{
<value1>
<value2>
...
<valuen>
}
在預設情況下,每個值都會根據定義的順序自動賦給對應的基本類型值。也就是說,value1的值是0,value2的值是1等等。也可以重寫這個過程:
enum<typeName> :<underlyingType> //定義枚舉,並且在後面設定儲存類型
{
<value1>=<actualVal1>
<value2>=<actualVal2>
...
<valuen>=<actualValn>
}
還可以使用一個值作為另一個枚舉值的基礎值,為多個枚舉指定相同的值:
enum<typeName> :<underlyingType> //定義枚舉,並且在後面設定儲存類型
{
<value1>=<actualVal1>
<value2>=<value1>
...
<valuen>=<actualValn>
}
沒有賦值的任何職都會自動獲得一個初始值,這裡使用的值是從比上一個明確聲明的值大1開始的序列。例如上例中<value3>的值是<value1>+1.
以迴圈的方式賦值可能會產生錯誤,例如:
enum<typeName> :<underlyingType> //定義枚舉,並且在後面設定儲存類型
{
<value1>=<value2>
<value2>=<value1>
}
枚舉的強制資料類型轉換:
directionString=MyDirection.ToString(); 等價於
directionString=Convert.ToString(MyDirection);
其中MyDirection是枚舉類型的資料變數,directionString是string類型的資料變數。
把string轉換為枚舉值,有特定的命令Enum.Parse(),用法如下:
(enumrationType)Enum.Parce(typeof(enumrationType),enumrationValueString);
具體的應用如下
string myString="north";
orientation myDirection=(orientation)Enum.Parse(typeof(orientation),myString); //其中orientation為枚舉類型
剛才系統崩潰了,嚇死寶寶了,幸虧有自動儲存。。。。。
C#學習第三天