c# 語法基礎速覽(跳過與Java C++一致部分)

C# 變量類型

  • sbyte
  • byte
  • short
  • ushort
  • int
  • uint
  • long
  • ulong
  • float
  • double
  • decimal
  • char
  • bool
  • string

switch

默認不能穿透,但是也必須有break用于結(jié)束。

顯式轉(zhuǎn)換

顯式轉(zhuǎn)換時默認unchecked,可以調(diào)用checked方法去調(diào)用。

顯式轉(zhuǎn)換可以用括號或者Convert類的方法。

使用as運算符,不能轉(zhuǎn)換返回null,但是as方法不能轉(zhuǎn)換為不能為null的基本類型。

枚舉

枚舉使用基本類型。

foreach

foreach(int item in items){
    WriteLine(item);
}

多維數(shù)組

多維數(shù)組

int[,] itemsMatrix=new int[3,4];

訪問

itemMatrix[3,4];

鋸齒數(shù)組

int [][] itemMatrix=new int[2][];
itemMatrix[0]=new int[3];
itemMatrix[1]=new int[4];

引用

  • ref: 在引用前需要賦值。
int a=0;
Increase(ref a)
  • out: 在引用前不需要賦值,實際上,也無法賦值,傳入的是新值。
static void OutTest(out int a)
{
    a = 20;
}
static void Main(string[] args)
{
    OutTest(out int a);
    Console.WriteLine(a);
}

委托

關鍵字delegate, 定義委托后,可以傳入方法進行執(zhí)行。

委托通常作為事件的類型使用。

屬性

基本寫法

private int c;
public int C
{
    get
    {
        return c;
    }
    set
    {
        c = value;
    }
}

自動屬性

public int Value{
    get;
    set;
}

get和set可以選擇性寫一個,表示只讀或者僅可寫,自動屬性可以添加默認值如下:

public int Value{
    get;
    set;
}=0;

繼承和多態(tài)

隱藏基類成員

不加override則會隱藏,但是會警告,使用new 關鍵字修飾方法可以直接隱藏。用new覆蓋的方法和用override重寫的方法,其主要區(qū)別是多態(tài)時的調(diào)用區(qū)別。重寫會改變父類型的方法,即使用父類型調(diào)用子類型實例的該方法時運行子類型的方法,而覆蓋則不會。

調(diào)用基類方法

可以用base

識別類型

typeof()

is

c# 6.0后可以用if(object is Type reNameObject)這種形式去使用is以更方便的開發(fā)。

運算符重載

也可以通過實現(xiàn)一些方法來進行,比如,繼承Comparable類并實現(xiàn)CompareTo方法。

可空類型

用于基本類型:如int?

??

op1??op2
等價于
op1==null?op2:op1

另一種常見做法是,在c# 6.0里

if(a!==null) a.method();

可簡寫為

a?.method();

單獨說一下,對于事件,在過去

if(myEvent!=null) myEvent();

現(xiàn)在c# 6.0可以寫成

myEvent?.Invoke();

初始化器

用{}表示,內(nèi)容為變量名=賦值。

也可以用于給集合類初始化,按順序即可。

例如:

    class Connection
    {
        //事件聲明
        //EventHandler是系統(tǒng)自建的用于處理事件的委托
        public event EventHandler<MessageArrivedEventArgs> MessageArrived;
        public String Name { get; set; } = "Default Connection";
        private Timer pollTimer;
        public static Random random = new Random();
        public Connection()
        {
            pollTimer = new Timer(100);
            //達到時間間隔時用CheckForMessage方法處理事件。(類型EvenHandler<MessageArrivedArgs>已經(jīng)隱式轉(zhuǎn)換)
            pollTimer.Elapsed += CheckForMessage;
        }
    }

可以這樣初始化

Connection connection = new Connection { Name = "First Connection" };

類型推斷

var(同C++ auto),實際應用中非常廣泛。

可選參數(shù)

Optional 修飾 或者 默認值為false

命名參數(shù)

傳參時用參數(shù)名:參數(shù)格式傳,建議使用時全部使用命名參數(shù)

Lambda

類似于java8的lambda,但是不限制于特定接口才能運用lambda,自由度很大。

public void Connect() => pollTimer.Start();
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容