31用d程式設計屬性合同程式設計

2021-10-03 09:13:47 字數 2159 閱讀 8279

可以指定成員函式作為屬性名.

這樣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 可...