閱讀801 返回首頁    go 技術社區[雲棲]


C#讀書筆記

最近因為Unity,所以較詳細的看了一遍原版的《Thingking in C#》,對於一些容易和c++混淆的地方,做下記錄:


1.Object type和value type:

1.1Object  在c#裏麵主要有兩種大的數據類型,一種叫做Object,c#裏麵的所有的自定義class都繼承自這個類型,所有的Object實際上都是一個reference,指向某個內存(包括數組,string類型)。Object必須通過new來早堆上分配分配(string 可以直接用引號)。

1.2value   :int float char enum struct 這些類型是value  type,是再棧上分配的,不用new,是聲明就有值的,握著的不是指針。

對於賦值操作,value type是拷貝傳值 object隻是傳遞引用

1.3boxing 和unboxing操作,將value 類型轉換為Object 類型是可以的,這個操作叫boxing,有性能損失,但是這是C#統一所有類型的方法

1.4c#永遠不再static內存上分配數據,但是有static關鍵字

1.5.生存周期,value type出了作用域就銷毀了,Object 類型默認要等待gc

1.6struct是不能有繼承的


2.可以如下定義枚舉類型,是隻支持邏輯操作

[Flags] 

enum Flavor{  
        Vanilla = 1, Chocolate = 2,  
        Strawberry = 4, Coffee = 8}       
Flavor conePref = Flavor.Vanilla | Flavor.Coffee; 


3.namespace可以嵌套

namespace ThinkingIn{ 
   namespace CSharp{ 
      namespace Chap3{ 
         //class and other type declarations go here 
      } 
   } 
}
namespace ThinkingIn.CSharp.Chap4{ … } 


4.數組類型

c對於多維數組c#有兩種數組類型:

rectangular array

string[,] names;

int[,,] buttons = new int[4,5,3];

即矩形的數組


jagged array

非矩形

byte[][] scores;

混合矩形和非矩形

int[][,,][,] numbers;


矩形數組的性能要更好


5.訪問屬性

privae internal(package內部是friendly的) protected public

class 隻能是internal或者public

默認屬性:class mem(private)

                    class(internal)


6.對於那些不希望讓c#管理資源的對象(自動的gc),通常是一些珍貴的資源,或者是一些你需要明確知道他析構的對象,需要繼承Idsiposal接口,自己釋放

https://dearymz.blog.163.com/blog/static/20565742009102745358396/


7.const 與readonly

c#的const 和c++完全不同,它是編譯器常量,即在編譯後會把const的地方自動用值替換(很像c++的宏),類中的const自帶static,const隻能修飾value type(編譯器常量)

 readonly 更像c++裏麵的const,是運行期的常量,對於object type,隻是引用不可變,但是引用的那個對象是可變的


8.sealed class:不能被繼承的class,所有的virtual 函數會被替換成可直接調用


9.as 操作符:類型轉換  is 操作符,判斷是否為某個類型

10.接口是可以被繼承的

11.反射機製

https://www.dotnetperls.com/reflection

12.講更多c#技術的書

https://csharpindepth.com/

最後更新:2017-04-03 05:38:55

  上一篇:go 《iOS6 application development》學習之路:No.5: __bridge,NSTimer和圓角
  下一篇:go c# 泛型