用屬性來實現封裝

2021-07-23 16:48:56 字數 1052 閱讀 8762

用屬性來實現封裝

屬性是c#引入的一種語言成分,只有很少的語言支援屬性。通過對屬性的讀和寫來保護類中的域。第一種方法體身也是一種好的方式,但用屬性來實現封裝會更方便。

現在我們來看乙個例子:

using system;

public class department

set}

}public class departmentmain

",d.departname);

return 0;}}

通過上面的例子,我們可以看到如何通過屬性來實現封裝。屬性具有兩種操作get和set。get用來返回屬性域的值。set通過value這個變數來給屬性域賦值。屬性可以設為唯讀的(read-only)。這只需屬性只具有乙個set操作。

唯讀屬性

using system;

public class readdepartment

public string departname}}

public class readdepartmain

",d.departname);

return 0;}}

在上面的例子中我們看到了如何來實現乙個唯讀的屬性。類readdepartment擁有乙個departname屬性只實現了get操作。它省略了寫操作。這個特別的類擁有乙個構造器,用來接受乙個字串變數。類readdepartmain中的main方法建立了乙個新的物件d。對像d的例項使用了類readdepartment帶有乙個字串引數的構造器。因為上面的屬性是唯讀的,所以我們不給給域departname賦值並且我們只側讀取此域中的值。當然屬性也可以是只寫的(write-only),這只需屬性只具有乙個get操作。

只寫屬性

using system;

public class writedepartment

",departname);}}

}public class writedepartmain

}在上面的例子中我們看到了如何來實現乙個只寫的屬性。類writedepartment擁有乙個departname屬性只實現了set操作。它省略了讀操作。

用metaclass來實現AOP

meta programming是aop實現的經常性手段,而這裡要展示的,是利用python的metaclass能力來實現 aop。當a的setx方法被呼叫時,會被 攔截 先輸出pre.然後是原始setx的方法呼叫,最後輸出post.class metaall type def new mcl,na...

用C 實現屬性

tmyclass class private fvalue integer funcationgetvalue integer proceduresetvalue value integer public property value integer read getvalue write setv...

用PINVOKE封裝來讀取txt到本地記憶體

之前的方法在放到伺服器上有諸多的限制,這邊最後使用了乙個c的二維陣列來讀取txt檔案,這個程式可能還有不妥之處,比如行列要指定之類的,先上呼叫的這段c的 封裝,感謝john在這邊付出了很多努力把32位的轉換為64位上再部署到服務中。include stdafx.h include include i...