1、
類只能擁有類自己的例項構造器;例項構造器不能被繼承;
2、 以下修飾符不能用於例項構造器:virtual、new、override、sealed、abstract;
如果類的修飾符為abstract,那麼預設構造器可訪問性為protected,否則為public;
3、 如果基類沒有提供無參構造器,那麼類必須顯示呼叫基類的構造器,否則編譯出錯;
public
abstract
class
base2
} //error:「
base2
」方法沒有採用
「」個引數的過載
//public class child2 : base2
//public
class
child2: base2
} 如果類的修飾符為static(sealed、abstract),那麼編譯器不會在類的定義中生成乙個預設的構造器;
4、 類的例項構造器在訪問基類繼承的任何字段之前,必須呼叫其基類的構造器;
5、 在構造器中不能呼叫任何虛方法
(雖然編譯無錯),這樣會影響所建立的物件,導致無法**;
public
abstract
class
base2
public
virtual
void virtual_fn()
}public
class
child2 : base2
public
override
void virtual_fn()
}輸出:
child2:virtual_fn
child2:virtual_fn
6、 下面的**中,類有三個構造器,所以編譯器產生三次初始化m_x、m_s、m_d——每次構造器一次;
internal
sealed
class
sometype
public sometype(int32 x)
public sometype(string s)
} 可以將公共初始化語句放到乙個單獨的初始化構造器中,以減少生成的**大小;
改造如下:
internal
sealed
class
sometype
// this constructor sets all fields to their default, then changes m_x.
public sometype(int32 x) : this()
// this constructor sets all fields to their default, then changes m_s.
public sometype(string s) : this()
}1、 clr允許建立值型別的例項,但是無法阻止值型別的初始化,因此值型別實際上不需要在其內部定義構造器;
值型別的構造器只有在被顯式呼叫時才會執行;
c#不允許值型別顯式定義無參構造器;
//error
:結構不能包含顯式的無引數建構函式
//public struct point
////}
2、 值型別的構造器必須初始化值型別的所有字段;
public
struct
point
}1、
型別構造器可以用於介面、引用型別、值型別;
2、 一般不在型別內部定義型別構造器,如果定義,不能超過乙個;
3、 c#自動將型別構造器標記為private,型別構造器前不能有訪問修飾符;
public
class
base1
// error
:型別構造器不允許出現訪問修飾符
private
static base1()
} 4、
永遠不要在值型別中定義型別構造器
,雖然可以這樣做,因為clr中存在不呼叫值型別的靜態構造器的情況;
internal
struct
somevaluetype
} static
void main(string args)
輸出:0
靜態構造器沒有執行;
5、使用靜態構造器時,要注意多執行緒同步;
第八章 指標 第八章 指標
1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...
第八章(筆記)
能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...
第八章 字典
d 空字典 d 這就是字典 d dict.fromkeys a b d dict zip keyslist,valslist d dict name bob age 22 建立字典的函式 d name 通過索引key獲取對應的value d.keys 返回d字典物件所有key,返回乙個列表 d.va...