一起來學C#之語法(1)

C#基礎語法

從今天開始就正常更新博文,之前因爲開學要準備各種各樣的材料、上課的筆記要整理等等都沒更新。後面我會給一直支持關注我的小夥們補上的。我準備更新以下幾個方面的內容,我會放到自己的專欄裏面,方便大家查閱,有興趣的小夥伴可以多多支持,有不正確的地方還請指出。
1.Java(主要是爲了藍橋杯,上學期學過但不具體,主要是複習加強化。大致內容也是會結合比賽實戰爲導向)
2.C#(最開始我也是更新這個的,因此很多小夥伴留言要好好學習C#,所以我會繼續分享。)
3.數據結構和算法(其重要性不言而喻,無論是工作面試還是考研都是重點)
4.計算機硬件知識(主要是是計算機組成原理,也是很重要的。對於程序開發人員來說,也是必備的知識,它是決定一個程序員的上限,畢竟總不能一直當低端的碼農吧。)
5.其它(其實就是水博客(戰術後仰),看心情不定時更新。例如我最近更新的《震驚!失蹤博主竟參加這種比賽》(標題黨實錘了))。
好了,廢話不多說了,開始正正經經的開始更新C#。之前更新的都是實際操作例子,很多小夥伴想自己隨意編寫一個窗體應用,那麼語法知識肯定是不能少的。
************************************************************************

推薦參考書目:“十二五”普通高等教育本科國家級規劃教材 C#程序設計案例教程(第二版)清華大學出版社。
在這裏插入圖片描述
當然,不想看書的小夥伴可以看我的總結。

對於基礎語法部分,學過一門編程語言的都知道無非是一些數據類型和格式上、運算上的要求。因爲是面向對象的語言,基礎語法大致相當,所以我會重點闡述獨特的地方。

主要內容

1.C#基本要求與變量存儲數據
2.C#數據類型的使用與定義
3.數據類型轉換

基本要求

1.嚴格區分大小寫。
2.“;”作爲代碼行的結束
3.以{}標記代碼塊
4.C#沒有全局變量和全局方法,所有元素必須包含在類中
5.C#源代碼文件名後綴爲.cs
6.註釋,C#的單行註釋與多行註釋與C語言相同,但它有一個XML註釋:/// ,這樣的註釋可以使得代碼可讀性強,並且使得成員類型具有自動提示功能。

數據類型

C#中的數據類型可以分爲值類型和引用類型,均由System.Object類派生。
在這裏插入圖片描述

值類型

值類型包括int、float等一系列幾乎其它語言都有的類型,我們具體講講不同的地方。
1.小數類型,它不是浮點數類型的一部分,它是C#單獨提供的。關鍵字爲decimal。它是所有數值中小數精度最高的,主要用於精度要求較高的金融和貨幣運算。
2.枚舉類型
枚舉類型裏面的元素類型相同,是表達固定意義的常量。所謂枚舉就是把元素一個一個列出來。下面我們以一個實際例子來了解枚舉的定義使用方法。

enum Program
{
A,B=6,C,D
}Program ch;
ch=Program.C;
Console。WriteLine(“C”);

其中可以看出,枚舉的定義關鍵字是enum,並且默認裏面的元素爲int型。該程序結果爲7。在枚舉類型裏面,缺省時第一個枚舉元素爲0,後面的依次遞增1。也就是說A就是0,後面的加1。

引用類型

主要包括類(class)、接口(interface)、委託(delegate)、字符串類型(string)、數組類型(arry)。具體的用法後面再介紹。
接下來主要以兩個例子談值類型和引用類型的區別。

1.值類型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 實例3_1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10;
            int b = 20;
            Console.WriteLine("before change:a={0},b={1}", a, b);
            Change(a, b);
            Console.WriteLine("after change:a={0},b={1}", a, b);
        }
        static void Change(int x,int y)
        {
            x = x + 10;
            y = y + 10;
        }
    }
}

運行結果爲:
在這裏插入圖片描述
2.引用類型(以數組爲例)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace example3_2
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] a = new int[1];
            a[0] = 10;
            Console.WriteLine("before change:a[0]={0}", a[0]);
            Change(a);
            Console.WriteLine("after cahnge:a[0]={0}", a[0]);
        }
        static void Change(int[]x)
        {
            x[0] += 10;
        }
    }
}

運行結果:
在這裏插入圖片描述
如果不瞭解兩者的區別,在不運行的情況下思考得出來的結果會是一樣的,爲什麼又不一樣呢?
引用類型的數據傳遞是傳遞的地址,值類型是送出具體的值。前者只是將數據複製一份給形參,無法傳回修改值。後者是將地址相互傳遞,值發生了改變,對應地址的值會更新。下表是具體的不同點的比較。
在這裏插入圖片描述

常量與變量

常量

類似於C語言中的define定義的標識符,無論在程序的哪個地方,都是一個常量。在C#中用const,定義的類型可以是任意的。並且要求在聲明時必須賦值。(好的標識符定義最好做到見名知義)

格式:<訪問修飾符>const 常量數據類型 標識符(常量名)=常量值; 例下:

public int a =10

變量

變量的定義與Java差不多,主要講類型。
C#中的變量類型一共七種,分別是 靜態變量、實例變量、數組元素、數值參數、引用參數、輸出參數、局部變量
其中,談一下輸出參數和引用參數的修飾及特點,其他的在後面會介紹。
1.out用於修飾輸出參數,表示引用傳遞,不是雙向傳遞。
2.ref用來修飾引用參數,表示按引用傳遞,傳遞是是雙向的。
接下來舉一個例子:

public static int x;
int y;
void fun(int[]arr,int a,ref int b,out int c)
{
int i=1;
c=a+b;
}

能分清裏面的參數類型就說明掌握得差不多了,基本能分辨各種參數。答案下期揭曉。

數據類型轉換

C#中有隱式轉換和顯式轉換,隱式轉換相當於C語言中的自動類型轉換,就是低精度往高精度轉換;顯式轉換就相當於C語言中的強制類型轉換。格式差不多。
但是有幾點要注意:
1.不存在decimal類型和float、double之間的隱式轉換。
2.不存在char和bool之間的類型轉換
3.不存在到char的隱式轉換。
4.顯式轉換可能會導致精度降低或者出現異常。

// 顯式轉換舉例
double a= 0.0033double b=1.6326int c =int)(a/b);

拆箱與裝箱

1.裝箱:數值類型轉換爲引用類型,拆箱:引用類型轉換爲數值類型。

//裝箱舉例
int a=55object b=a;
Console.WriteLine(“轉換後的值:”,b);
//拆箱舉例
int a=23object b =a;
int(c)=int)b;
Console.WriteLine(“轉換後的值:”,c);

這就是裝箱和拆箱的格式。

.NET類庫支持的方法轉換

1.ToString()方法
可以利用該方法將源數據轉換爲string類型,格式如下

int a=23string b=a.ToString();

2.Parse()方法
該方法可以將字符串類型轉換爲其它類型

int b =Int32.Prase(“23”);//32代表將字符串轉換爲32位有符號整數

3.Convert類
該類包含很多靜態方法,支持多種類型轉換,但是他不提供到float的轉換。

int b =Convert.ToInt32(“23”);

參數格式和值超出目標類型的界限會有異常。

最後舉一個實例
情景:設計一個方法和函數,驗證登錄信息的正確性。(例如,在類的內部設置應戶名:abbbc 密碼:123456,然後驗證是否可以登錄。)
可以自己先寫一下再來對照。

代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace example3_6
{
    class Login
    {
        const string name = "abbbc";
        const string pass = "123456";
  public bool CheckUser(String username,String password)
        {
            if(name.Equals(username)&&pass.Equals(password))
                {
                return true;
            }
            else
            {
                return false;
            }
        }
        static void Main(string[] args)
        {
            String username = args[0];
            String password = args[1];
            Login login = new Login();
            bool flag = login.CheckUser(username, password);
            Console.WriteLine("該用戶登錄信息爲:"+flag);
            Console.ReadKey();

        }
    }
}

注意:1.在判斷兩個字符串類型是否相等時,用Equals方法,==比較的是對象存儲的地址值,一直會是false。
2.在運行前要指定兩個參數,具體方法:點擊“項目”,找到該程序的屬性,然後輸入如下的參數(嚴格按照格式,兩個參數中間要隔開):
在這裏插入圖片描述
運行結果如下:
在這裏插入圖片描述
這就是今天的所有內容了,有疑問可以在評論區留言或者私聊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章