可以指定成員函式
作為屬性名.
這樣a.b
,b就可能是函式,只要前面加了@屬性
.
.length
屬性不能修改靜態陣列.對切片,有可能會分配空間,甚至移動到新位置+初化新成員.
因為屬性,所以呼叫函式,可以不加()
.
struct rectangle
auto garden =
rectangle(10
,20);
writeln
(garden.area)
;struct rectangle
//常,保證本函式不修改本物件
}
這樣,就強制保證了一致性
.不會被修改.
auto garden =
rectangle(10
,20);
writeln
("面積為: "
, garden.area)
;
就像第三個成員變數一樣使用.
void
area
(double newarea) @property
修改,作為set
.
當然.也能夠實現成員函式的唯讀訪問,即用個函式包裝成員.不允許設定(即寫)
in,out
用於保證函式的不變.而類/構
則:
class
school
// ...
}
可在構
中定義.可以有多個invariant()
塊.
可在構造器後,析構器前
,及在執行公有/匯出成員函式前後
,匯出函式是匯出在動態庫介面
中的函式.
dmd deneme.d -w -release
,發布時依然禁用了.發布太厲害了.
介面和類
成員也可有in/out
,允許為他們定義基本的限制(前條件)
或者為使用者定義後條件
繼承類可在覆蓋的函式中
定義進一步的in/out
,可鬆可嚴格.只要有乙個滿足相應的限制塊
就行了.
in
塊只相應的滿足就行.即進塊可以變鬆,只要不出現斷定錯誤就可
.如果父級失敗,就執行子級進塊
,相當於||…||…
out
塊所有限制都要滿足.則是(…&&…)
執行函式時in
/out
從最上到下一層層檢查.
inte***ce iface out (result)
}class
class
: iface out (result)
body
if(b.length ==0)
foreach (i;0.
. a.length)
result[0]
= result[$ -1]
=42;return result;}}
import std.stdio;
void
main()
示例:
class
protocol
body
}class
specialprotocol
: protocol
}void
main()
子塊,不檢查in
塊,結果出錯.按道理子塊
也要繼承父塊
的前提條件.
class
specialprotocol
: protocol body
}
加個假這樣,防止不檢查.因為進
條件是||...
56用d程式設計使用者定義屬性
可給任何宣告 結構,類,變數 賦值屬性,然後編譯時訪問他們來改變編譯的方式.使用者定義屬性完全是編譯時特徵.encrypted string name 可以指定多個屬性.這樣 encrypted colored string lastname encrypted,colored string add...
05用d程式設計切片
切片,動態陣列的別名.起.尾 是這樣的 即左包右不包 切片不是實體,就像鑰匙一樣.如果切片修改實體,則實體也跟著變了.a.a 大小為0,a.表示陣列長度,等價於陣列.長度.dup複製實體.如下 import std.stdio void main 賦值 int 3 a 1 1,1 int 3 b 2...
06用d程式設計 串
最簡單定義 char是串,字元陣列 d有三種陣列型別.import std.stdio void main 用 c z 可以看到結果,否則 回車 沒用.readf不適合讀串,讀符就差不多了.readln適合讀串,就不需要 s及 運算子了.如下 import std.stdio void main 可...