C# 變量類型
- sbyte
- byte
- short
- ushort
- int
- uint
- long
- ulong
- float
- double
- decimal
- char
- bool
- string
switch
默認(rèn)不能穿透柳击,但是也必須有break用于結(jié)束姿鸿。
顯式轉(zhuǎn)換
顯式轉(zhuǎn)換時(shí)默認(rèn)unchecked粪般,可以調(diào)用checked方法去調(diào)用尼酿。
顯式轉(zhuǎn)換可以用括號或者Convert類的方法。
使用as運(yùn)算符,不能轉(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: 在引用前不需要賦值榨惰,實(shí)際上,也無法賦值静汤,傳入的是新值琅催。
static void OutTest(out int a)
{
a = 20;
}
static void Main(string[] args)
{
OutTest(out int a);
Console.WriteLine(a);
}
委托
關(guān)鍵字delegate, 定義委托后,可以傳入方法進(jìn)行執(zhí)行虫给。
委托通常作為事件的類型使用藤抡。
屬性
基本寫法
private int c;
public int C
{
get
{
return c;
}
set
{
c = value;
}
}
自動(dòng)屬性
public int Value{
get;
set;
}
get和set可以選擇性寫一個(gè),表示只讀或者僅可寫狰右,自動(dòng)屬性可以添加默認(rèn)值如下:
public int Value{
get;
set;
}=0;
繼承和多態(tài)
隱藏基類成員
不加override則會(huì)隱藏,但是會(huì)警告舆床,使用new 關(guān)鍵字修飾方法可以直接隱藏棋蚌。用new覆蓋的方法和用override重寫的方法,其主要區(qū)別是多態(tài)時(shí)的調(diào)用區(qū)別挨队。重寫會(huì)改變父類型的方法谷暮,即使用父類型調(diào)用子類型實(shí)例的該方法時(shí)運(yùn)行子類型的方法,而覆蓋則不會(huì)盛垦。
調(diào)用基類方法
可以用base
識別類型
typeof()
is
c# 6.0后可以用if(object is Type reNameObject)這種形式去使用is以更方便的開發(fā)湿弦。
運(yùn)算符重載
也可以通過實(shí)現(xiàn)一些方法來進(jìn)行,比如腾夯,繼承Comparable類并實(shí)現(xiàn)CompareTo方法颊埃。
可空類型
用于基本類型:如int?
??
op1??op2
等價(jià)于
op1==null?op2:op1
另一種常見做法是,在c# 6.0里
if(a!==null) a.method();
可簡寫為
a?.method();
單獨(dú)說一下蝶俱,對于事件班利,在過去
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);
//達(dá)到時(shí)間間隔時(shí)用CheckForMessage方法處理事件。(類型EvenHandler<MessageArrivedArgs>已經(jīng)隱式轉(zhuǎn)換)
pollTimer.Elapsed += CheckForMessage;
}
}
可以這樣初始化
Connection connection = new Connection { Name = "First Connection" };
類型推斷
var(同C++ auto),實(shí)際應(yīng)用中非常廣泛闯割。
可選參數(shù)
Optional 修飾 或者 默認(rèn)值為false
命名參數(shù)
傳參時(shí)用參數(shù)名:參數(shù)格式傳彻消,建議使用時(shí)全部使用命名參數(shù)
Lambda
類似于java8的lambda,但是不限制于特定接口才能運(yùn)用lambda宙拉,自由度很大宾尚。
public void Connect() => pollTimer.Start();