C#是一種通用的,類(lèi)型安全的面向?qū)ο缶幊陶Z(yǔ)言。其目標(biāo)是提高程序員生產(chǎn)力。
一.面向?qū)ο?/h2>
C#實(shí)現(xiàn)了豐富的面向?qū)ο蠓妒?,包括封裝、繼承、多態(tài)。
C#面向?qū)ο筇匦园ǎ?br> 統(tǒng)一的類(lèi)型系統(tǒng)
類(lèi)與接口
屬性、方法、事件
C#支持純函數(shù)模式
二、類(lèi)型安全性
C#是一門(mén)類(lèi)型安全的語(yǔ)言。例如:C#不允許將字符串類(lèi)型作為整數(shù)類(lèi)型處理。
C#支持類(lèi)型靜態(tài)化。能夠在程序運(yùn)行前排除大量錯(cuò)誤。
C#允許使用dynamic關(guān)鍵字動(dòng)態(tài)定義指定類(lèi)型。然而C#在大多情況下仍然是一門(mén)靜態(tài)語(yǔ)言。
C#還是一門(mén)強(qiáng)類(lèi)型語(yǔ)言。
三、內(nèi)存管理
C#依靠運(yùn)行時(shí)來(lái)實(shí)現(xiàn)自動(dòng)內(nèi)存管理。公共語(yǔ)言運(yùn)行時(shí)的垃圾回收器會(huì)作為程序的一部分運(yùn)行。
C#并未拋棄指針,關(guān)鍵字unsafe的程序塊顯式內(nèi)存分配。
四、平臺(tái)支持
Linux、macOS、iOS、Android
五、CLR
公共語(yǔ)言運(yùn)行時(shí)(Common Language Runtime,CLR),如自動(dòng)化內(nèi)存管理和異常處理。
C#也會(huì)將代碼編譯為托管代碼。托管代碼以中間語(yǔ)言(Intermediate Language,IL)的形式表示。CRL通常會(huì)在執(zhí)行前,將IL轉(zhuǎn)換為機(jī)器(如x84、x64)原生代碼,稱(chēng)為即時(shí)(Just-In-Time)編譯。
六、.NET Framework
.NET Framework是由CLR和大量的程序庫(kù)組成。
七、其他框架
UWP
.Net Core
ASP.NET Core
Xamarin
八、簡(jiǎn)史
8.1C# 7.0新特性
8.1.1 數(shù)字字面的改進(jìn)
下劃線(xiàn)改善可讀性:
int million = 1_000_000;
二進(jìn)制字面量使用Ob前綴來(lái)標(biāo)識(shí):
int a = 0b1001_0000;
var b = 0b1001_0000;
8.1.2 輸出變量及參數(shù)忽略
調(diào)用含有out參數(shù)的方法將更加容易:
bool successful = int.TryParse("123", out int result);
Console.WriteLine(result);
當(dāng)調(diào)用含有多個(gè)out參數(shù)方法時(shí),可以使用下劃線(xiàn)字符_忽略你并不關(guān)心的參數(shù):
方法
static void SimpleMethod(out int result,out int result2 ,out int result3)
{
result = 1 + 1;
result2 = 2 + 2;
result3 = 3 + 3;
}
調(diào)用
SimpleMethod(out _, out _, out int result2);
8.1.3 模式
is運(yùn)算符也可以自然的引入變量,稱(chēng)為模式變量
方法
static void SimpleMethod2(object x)
{
if(x is string s)
{
Console.WriteLine(s.Length);
}
}
調(diào)用
SimpleMethod2("大家好呀");
同樣 switch語(yǔ)句也同樣支持模式??梢允褂脀hen子句來(lái)判斷條件,或是直接選擇null;
方法
static void SimpleMethod3(object? x)
{
switch(x)
{
case int i:
Console.WriteLine("It is an int");
break;
case string s:
Console.WriteLine(s.Length);
break;
case bool b when b == true :
Console.WriteLine("True");
break;
case null:
Console.WriteLine("It is null");
break;
}
}
調(diào)用
SimpleMethod3(12);
SimpleMethod3("12");
SimpleMethod3(true);
SimpleMethod3(null);
8.1.4 局部方法
局部方法是聲明在其他函數(shù)內(nèi)部的方法
static void WriteCubes()
{
Console.WriteLine(Cubu(3));
Console.WriteLine(Cubu(4));
Console.WriteLine(Cubu(5));
int Cubu(int value) => value * value * value;
}
8.1.5 更多的表達(dá)式體成員
C#6引入了以”胖箭頭“語(yǔ)法表示的表達(dá)式的方法,只讀屬性、運(yùn)算符以及索引器。而C#7更將其擴(kuò)展到了構(gòu)造函數(shù)、讀/寫(xiě)屬性和終結(jié)器中:
類(lèi):
public class Person : IAsyncDisposable
{
string? name;
public Person(string? name) => Name = name;
public string? Name
{
get => name;
set => name = value ?? "";
}
public ValueTask DisposeAsync()
{
Console.WriteLine("Dispose");
return ValueTask.CompletedTask;
}
}
方法:
static async void PersonDispose()
{
await AsyncPersonDispose();
}
static async Task AsyncPersonDispose()
{
await using (Person p = new Person("小米"))
{
Console.WriteLine(p.Name);
}
}
8.1.6 解構(gòu)器
C#7引入了結(jié)構(gòu)器模式。構(gòu)造器一般接受一系列(作為參數(shù))并將其賦值給字段,而結(jié)構(gòu)器則正相反,它將字段反向賦值給變量。
類(lèi)
public class Dog
{
string? name;
public Dog(string? name) => Name = name;
public string? Name
{
get => name;
set => name = value ?? "";
}
public void Deconstruct(out string firstName,out string lastName)
{
int spacePos = name.IndexOf(' ');
firstName = name.Substring(0, spacePos);
lastName = name.Substring(spacePos + 1);
}
}
調(diào)用
var joe = new Dog("joe Bloggs");
var(first,last)=joe;
Console.WriteLine(first);
Console.WriteLine(last);
8.1.7 元組
C# 7 改進(jìn)當(dāng)屬顯示的元組(tuple)支持,元組提供了一系列相關(guān)值的簡(jiǎn)單方式:
var bob = ("Bob", 23);
Console.WriteLine(bob.Item1);
Console.WriteLine(bob.Item2);
C#的新元組實(shí)質(zhì)上是使用了System.ValueTuple<…>泛型結(jié)構(gòu)的語(yǔ)法糖。
我們還可以對(duì)元組的元素命名:
var tuple = (Name: "Bob", Age: 23);
Console.WriteLine(tuple.Name);
Console.WriteLine(tuple.Age);
有了元組函數(shù)再也不用通過(guò)一系列out參數(shù)來(lái)返回多個(gè)值了:
static (int row, int colum) GetFilePosition() => (3, 10);
var pos = GetFilePosition();
Console.WriteLine(pos.row);
Console.WriteLine(pos.colum);
元組隱式的支持解構(gòu)模式
(int row,int column) = GetFilePosition();
Console.WriteLine(row);
Console.WriteLine(column);
8.1.7 thow表達(dá)式
現(xiàn)在它可以出現(xiàn)在表達(dá)式體函數(shù)中
public string Foo() => throw new NotImplementedException();
thow表達(dá)式也可以出現(xiàn)在三無(wú)判斷運(yùn)行符中:
方法
static string Capotalize(string? value) =>
value == null ? throw new ArgumentException("Value") :
value == "" ? "" :
char.ToUpper(value[0]) + value.Substring(1);
調(diào)用
Console.WriteLine(Capotalize(null));
8.2 C# 6.0新特性
null條件(“Elvis”)運(yùn)算符,可以避免在調(diào)用方法或訪(fǎng)問(wèn)類(lèi)型的成員之前顯式地編寫(xiě)用于null判斷的語(yǔ)句。如下result將會(huì)為null而不會(huì)拋出NullReferenceException:
System.Text.StringBuilder sb = null;
string result = sb?.ToString();
lambda表達(dá)式
public int TimesTwo(int x) => x * 2;
public string someProperty => "Property value";
屬性初始化器可以對(duì)自動(dòng)屬性進(jìn)行初始賦值:
public DateTime TimeCreated { get; set; } = DateTime.Now;
這種初始化也支持只讀屬性:
public DateTime TimeCreated { get; } = DateTime.Now;
只讀屬性也可以在構(gòu)造器中賦值。
索引初始化器可以一次性初始化具有索引器的任意類(lèi)型:
var dict = new Dictionary<int, string>()
{
[3] = "three",
[20] = "ten"
};
字符串插值用更加簡(jiǎn)單的方式替代了string.Format:
string s = $"It is {DateTime.Now}";
Console.WriteLine(s);
異常過(guò)濾器,可以在catch上再加一個(gè)條件:
string html;
try
{
html = new WebClient().DownloadString("http://asef");
}
catch(WebException ex) when(ex.Status == WebExceptionStatus.Timeout)
{
}
using static 指令可以引入一個(gè)類(lèi)型的所有靜態(tài)成員,這樣就可以不用寫(xiě)類(lèi)型而直接使用這些成員:
using static System.Console;
WriteLine("Hello world");
nameof運(yùn)算符返回變量、類(lèi)型或者其他符號(hào)的名稱(chēng),這樣可以避免變量重命名造成不一致的代碼:
int capacity = 123;
string x = nameof(capacity);
Console.WriteLine(x);
值得一提的是C# 6.0可以在catch和finally塊中使用 await.
8.3 C# 5.0新特性
async和await,支持異步功能,有利于編寫(xiě)高并發(fā)和高效的I/O密集型應(yīng)用程序。
8.4 C# 4.0新特性
1.動(dòng)態(tài)綁定
2.可選參數(shù)和命名參數(shù)
3.用泛型接口和委托實(shí)現(xiàn)類(lèi)型變化
4.改進(jìn)COM互操作性
8.5 C# 3.0新特性
隱式局部變量、匿名類(lèi)型、對(duì)象構(gòu)造器、lambda表達(dá)式、擴(kuò)展方法、查詢(xún)表達(dá)式、表達(dá)式數(shù)。
8.5 C# 2.0新特性
泛型、可空類(lèi)型、匿名方法、分部類(lèi)、靜態(tài)類(lèi)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-719737.html
下一篇: C#核心筆記——(二)C#語(yǔ)言基礎(chǔ)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-719737.html
到了這里,關(guān)于C#核心筆記——(一)C#和.NET Framework的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!