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();