程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

編輯:關於C語言
前面

我們接觸了數據類型和變量、操作符以及常用的控制流語句,利用這些知識我們已經可以寫一些簡單的程序。本文我們通過實際的例子對C#語言中的方法進行學習,並對涉及到前面學習過的知識進行回顧。

再強調,我們的目標人群是初學者,有經驗的朋友自覺點擊右上角。但初學者僅僅靠幾篇文章是不能掌握語言的,這裡只能作為輔助,還要自己下功夫。

本文我們將完成一個比較有趣的程序,它包含三個功能:

1、通過輸入要查詢的數字和國家代號查詢近15天內各個國家必應壁紙(圖片描述+地址);

2、將查詢到的壁紙下載到本地電腦中;

3、將下載得到的壁紙設置為桌面背景;

順便也了解了這些內容:

4、控制台應用程序輸入輸出操作;

5、從字符串中截取部分字符串(從網頁源碼中獲取地址);

在開始之前先對方法有一個感性的認識。

我們的程序支持循環查詢並可還可能會對功能進行擴展,那麼以上這些功能需要重復使用,為了使用上的方便以及代碼的易讀性(全部寫在一塊必然是一鍋亂粥),最好的辦法就是對這些功能進行分塊,每個功能被包裝成一個黑盒子,對於使用這些功能的人來說,不需要去知道其內部的具體實現方式,只要將必需的信息傳送給黑盒子(參數),它就應該返回我們所需的信息(返回值),這個黑盒子便是方法。注意,有些情況下不需要輸入信息或輸出信息,即方法可以有無參數,也可以有無返回值。下面我們看看方法長什麼樣子。

1、首先新建一個控制台應用程序

打開Visual Studio 2015,新建——項目,如下圖所示,在模版——Visual C#——Windows中選擇控制台應用程序,項目名稱填寫為bing,確定即可。注意記錄下項目路徑。

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

▲新建項目

新建項目僅包含如下所示代碼:

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

▲新建項目默認代碼

回顧之前類(class)的概念,C#程序是由一個或多個類組成的,就好比一場音樂會,有拉小提琴的、有吹小號的……我們可以根據類實例化出多個基於該類的對象,比如拉小提琴的有5個…當然這裡的類可被實例化的前提是,他是一個非靜態類。對於靜態類,是不能被實例化的。

在上面的代碼中只包含一個Program類,注意它的定義方式,class後面跟類名,而類的內容被包含在一對大括號中。

在類的內部就可以包含一些方法,表示這個類可以完成的一些功能。在上面的代碼中,包含了一個名為Main的方法,它同時也是應用程序運行的起點,具有固定的名稱,不可更改。而且必須是靜態方法(用static修飾),不需要對類進行實例化就可以運行。Main方法默認前面用void進行修飾,void即表示方法不需要返回數據。方法名後有一對圓括號,用於向方法傳遞參數。方法的主體內容則都放在緊隨其後的一對大括號中。

有了Main方法,我們就可以在其中寫一些代碼,編譯運行,我們所寫的代碼就會依次執行。

注意到,在類代碼外層還有命名空間(namespace),這是對類進行分類的一種方式。比如一個項目需要多人完成,為了避免類名沖突,將各自的類放在不同的命名空間中做區分。新建項目默認將類放在以項目名為名稱的命名空間中。

方法的調用:

在編寫代碼時,我們經常會使用平台為我們寫好的現成方法,要使用這些方法,分兩種情形:

對於靜態方法,直接通過類名進行調用,方法為:

類名.方法

對於非靜態方法,需要通過類的實例化對象進行調用,方法為:

對象名.方法

由於這些類與我們項目中的類不在同一個命名空間,因此需要通過using語句將其命名空間添加近來,在代碼的最頂部就可以發現有若干using語句。

對於類內部的方法,則可以直接通過方法名進行調用。

2、獲取用戶輸入

在控制台應用程序中進行輸入和輸出分別使用System命名空間中的Console.ReadLine()和Console.WriteLine()方法。(實際上是Console靜態類中的兩個靜態方法)。

Console.WriteLine()方法沒有返回值,只需將需要輸出的值放在括號內即可在控制台中輸出。

Console.ReadLine()則會將我們在控制台中輸入的一行字符作為字符串返回。那麼我們可編寫出如下圖所示的三行代碼,每一行都是一條語句,每條語句都以英文分號結束:

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

▲控制台輸入和輸出

這裡第一行語句只是簡單的給出一個提示(提示內容作為參數傳入),第二行會等待用戶輸入,輸入完成後回車程序會將輸入內容返回並賦值給day字符串變量,第三行則輸出day字符串變量,只是為了驗證一下我們的輸入。點擊上圖中頂部的綠色啟動按鈕,編譯運行,驗證一下程序是不是正常,如下圖所示:

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

▲控制台輸入和輸出演示(第二行為輸入,第三行為輸出)

注:運行完成後控制台窗口會自動關閉,這是正常現象。

我們的目標是由用戶輸入兩個參數,即日期和國家代碼,將這兩個參數分別賦值給day和mkt兩個字符串變量,那麼可編寫如下代碼:

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

▲控制台獲取兩個數據

但這樣的代碼看起來可能不太直觀,我們盡可能讓代碼看起來更簡潔一些,於是我們開始編寫我們的第一個自定義方法——獲取用戶輸入。

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

▲將從控制台獲取數據包裝為方法

這個方法我們將它取名為GetInputString,圓括號內指定了方法要求傳入的參數(稱為形參),這裡需要一個字符串類型參數,方法名前面的string修飾符表示該方法需要返回一個字符串值。方法內的第一條語句接受參數值,並輸出作為提示,這裡我們使用了另外一個方法Console.Write,它在輸出提示內容後不換行。第二條語句通過return關鍵字返回程序運行時你所輸入內容。

在Main方法中我們也改寫了之前的代碼,通過調用GetInputString方法,將提示語作為參數(調用者為方法傳入的值稱為實參,與形參必須是一一對應的),方法將用戶輸入內容賦值給兩個字符串變量。至此我們已經完成了用戶輸入的獲取。下面我們將根據用戶的輸入獲取我們想要的東西——必應壁紙!

注意:在命名上我們有一些約定,對於方法名我們采用Pascal風格,即每個單詞的第一個字母都大寫,對於方法內部的變量(局部變量)和參數,則采用camel風格,即第一個字母小寫,其余單詞首字母大寫。這並非強制規范,但是一種建議遵守的約定。

3、根據輸入獲取查詢結果並輸出

我們要從網頁中獲取必應壁紙查詢結果,為了降低復雜度,豆豆簡單制作了一個Web查詢API,http地址規則如下:

http://test.dou.ms/bing/day/-1/mkt/zh-cn

其中day後面的數字即表示哪一天,可取值為-1、0、1…到15,分別表示明天(提前一天預覽)、今天、昨天、前天…..15天前。mkt後面的zh-cn表示國家代碼,可取值為JA-JP、ZH-CN、EN-IN、DE-DE、FR-FR、EN-GB、PT-BR、EN-CA、FR-CA、EN-US、EN-WW、EN-AU,其所代表的國家就不一一介紹了,這裡也不區分大小寫。那麼上面這個地址其實是必應中國明天的壁紙信息(每天都在更新),也可通過浏覽器打開,頁面返回的只是簡單的一串字符。當然,在與服務器進行數據傳遞時有更規范的數據格式,比如JSON、XML,但我們不想把事情搞“復雜”。

這裡直接給出編寫好的從http地址獲取網頁內容的方法GetHttpData,如下圖所示:

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

▲從網頁中獲取數據的方法

該方法以地址作為參數,並返回網頁內容(字符串)。這裡面用到了四種類,分屬System.IO、System.Net兩個命名空間,因此需要在代碼的最前面加上兩行using語句。關於方法內每條語句的作用,可參考圖中的注釋,具體的代碼含義等到學習過類的更多相關知識後會充分理解。

在C#語言中//表示行內注釋,即在本行內,該符號後面的文字都被視為注釋,注釋是提供給人閱讀的內容,有無注釋對程序本身並無影響。

下面我們根據用戶輸入的兩個參數直接調用上面的方法從對應地址獲取到查詢結果,代碼如下圖所示:

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

▲調用方法,獲取網頁內容

這裡我們對字符串進行了拼接,字符串拼接使用+操作符,並將拼接好的字符串賦值給url字符串變量。然後以url為參數調用GetHttpData方法,並將返回的網頁內容賦值給content字符串變量,最後將其輸出。運行結果如下圖所示:

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

▲查詢結果

同樣我們也可以對根據用戶輸入參數獲取網頁內容的過程進行包裝,得到一個方法,命名為GetBingData,並改寫Main方法中相關的代碼,最終如下圖所示:

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

至此,我們已經完成了根據參數獲取必應壁紙信息的任務。

4、從查詢結果中提取圖片地址

上一步我們已將查詢結果作為字符串存儲在content變量中,接下來需要從中提取出圖片地址,觀察一下其實我們只需要在返回的字符串中截取“地址:”後面的字符串即可。在C#中字符串也是一個類,它有自己的方法,其中Split()方法的作用就是分割字符串,我們利用它來寫一個自定義方法GetBingImageUrl,專門用來從查詢結果中提取出圖片地址,如下圖所示:

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

同時我們在Main方法中調用自定義方法GetBingImageUrl獲取了查詢得到的必應圖片的地址。

5、根據地址將文件下載到本地電腦

下載Http文件,可使用System.Net中提供的WebClIEnt類的DownloadFile方法,同樣,我們把這個功能寫成一個方法DownLoadImage,如下圖所示:

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

其中傳遞給DownloadFile的第二個參數為想要保存的文件名,Path.GetFileName()方法用於從地址中獲取文件名和擴展名,最終文件被保存在與程序文件相同的目錄(項目文件夾的\bin\Debug目錄下)。

6、將下載到的圖片設置為桌面背景

設置桌面壁紙我們需要調用Windows API來實現,對應的方法SystemParametersInfo在"C:\Windows\System32\user32.dll"文件中,在C#中調用Windows API需要從DLL中導出函數(使用DllImport特性,需要引入System.Runtime.InteropServices命名空間),即聲明一個外部函數,具體方法如下圖所示,外部函數用extern進行修飾,方法沒有主體代碼,並且為靜態。

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

同時我們調用該靜態方法自定義了一個用於設置桌面壁紙的方法SetWallpaper,以壁紙在本地電腦中的路徑為參數。

隨後在Main方法中我們調用了SetWallpaper方法設置了桌面壁紙。其中,Directory.GetCurrentDirectory()用於獲取應用程序所在的目錄,與文件名一起拼接成圖片的完整路徑。注意到,拼接時中間的路徑分隔符使用了\\,這是因為\在代碼中有特殊的用途(用作轉義),將其作為字符使用時需要對其進行轉義,而轉義符又恰好是\。

最後為了實現重復查詢,我們通過while語句將Main方法中的代碼包起來,while語句的判斷條件設置為true,結果就是while中的語句將循環不斷地執行,直到關閉應用程序。最終Main方法中的代碼如下,這樣看起來思路還是比較清晰的。

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

最後編譯運行代碼,結果如下圖:

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

Win10開發入門:C#語言基礎之用方法實現必應壁紙小工具

▲最終效果

到此我們就完成了一個簡單的必應壁紙查詢工具,並且兼具壁紙下載和設置桌面壁紙功能。當然,程序還有很多不完善,比如你需要確保輸入的參數沒有錯誤,否則會引發異常。

源代碼文件下載網盤下載(密碼:fcbd)

總結

本文例子主要目的是對方法的編寫和調用有一個印象,這裡調用過的方法包括我們自定義的方法、平台提供的靜態類中的靜態方法以及非靜態類實例化對象的方法。為了便於理解只做了一些必要的解釋,至於更詳細的知識細節以及未有涉及到的較高級內容,比如方法的重載、遞歸等等需要自己查閱資料進行學習。下次我們開始對類和對象做比較深入的理解。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved