C# 2018.9.17
C# 2018.9.17
C#的優點:
1,不會有運行時崩潰,解決了C++的痛點一,難預防,難查錯
2,使用文件不需要包含進來,只需要using namespace即可,解決了C++的痛點二,包含復雜,路徑復雜,編譯復雜
3,編譯速度極快,解決了C++的痛點三
4,庫代碼易懂,智能提示好。
std::map<int, <error-type>, std::less<int>, std::allocator<std::pair<const int, <error-type>>>>
5,對于中小應用極其方便,因為內存托管
6,完善,豐富,易用,高效的各種功能庫:線程,網絡,數據庫,窗口編程庫
7,強大的語言新特性:lambda,委托,正則,局部函數,閉包,linq,
6,簡潔,易用,功能全,開發效率高,是生產利器
7,有U3D光環加成,微軟親兒子,非常適合用于游戲開發,兼具了運行效率與開發效率,兼合了C++,LUA的功能
readonly : 運行時常量,僅能在定義時初始化或在構造函數中被初始化,
它僅指對象本身不能被改變,但對象內部數據可以被改變,這是不同于C++常引用的地方,C#沒有常引用類似的功能
const: 編譯時常量
as 與強制類型轉換:
as 只能用在類或結構上,有父子關系
as 要比強制類型轉換安全,效率高。為什么效率高?try-catch
如何比較兩個變量的內存地址是否相同? referenceEquals
靜態構造函數,
1,在類的靜態變量第一次被使用時調用。
2,不能直接被調用
3,靜態構造函數必須無參
靜態構造函數機制實現線程安全的單例:
//方式一,
public static CSingleTest inst;
static CSingleTest()
{
inst = new CSingleTest();
}
CSingleTest()//這里有什么用???
{
Console.WriteLine("constructor");
}
//方式二
public static CSingleTest inst = new CSingleTest();
static CSingleTest()
{
Console.WriteLine("static constructor");
}
CSingleTest()//這里有什么用???
{
Console.WriteLine("constructor");
}
線程同步機制:對象鎖
class safetySingletonByLock
{
object _lock = new object();
public static safetySingletonByLock inst;
safetySingletonByLock()
{
if(null == inst)
{
lock (_lock)
{
if (null == inst)
inst = new safetySingletonByLock();
}
}
}
}
結構體相等比較,默認情況下是如何比較的??? 內容對比,如何驗證? 隨著數據復雜性提升而變慢,而引用類型則不會這樣
為什么不是地址比較???? 值類型
構造函數可以被主動調用
子類的每個構造函數默認都會調用父類的無參構造函數
一個構造函數最多只能調用一個構造函數,這個被調用的構造函數可以是本類的,父類的
根據以上原理,常見的問題:
1,父類僅有帶參構造函數時,子類構造函數必須主動調用父類構造函數
class xbase{
protected xbase(float fx){}
}
class child : xbase {
public float fx;
public xbase() : base(1)//必須調用父類構造函數
,this(2)//error,只能調用一個構造函數
,fx(2); //error, C++初始化列表方式不再支持
{
}
public xbase(float fx){}
}
泛型問題
?
posted on 2018-09-17 16:35 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的C# 2018.9.17的全部內容,希望文章能夠幫你解決所遇到的問題。