- extension 跟 class的語法在dart lan差別
使用class的方式和使用extension的方式都可以為現有class添加新的功能。然而,class和extension之間有一些關鍵的區別:
-
目的和設計思路:class用於創建對象和定義對象的行為和狀態,它是面向對象編程的核心概念之一。extension的目的是為現有class添加新的方法或成員,以提供額外的功能或extension現有class的能力。
-
訪問權限:class內部可以訪問class的私有成員(私有屬性和方法),而extension無法訪問原始class的私有成員。extension只能訪問原始class的公共成員(公共屬性和方法)。
-
extension的適用場景:extension通常用於為第三方庫或原始class添加額外的功能,而無需修改原始class的代碼。如果您有權修改原始class的代碼,並且添加新功能不會破壞現有代碼的穩定性和兼容性,那麼在class內部直接添加新的方法或成員可能更為合適。
-
繼承關係:class可以通過繼承關係構建層次結構,子class可以繼承和重寫父class的方法。而extension沒有繼承關係,它只能為單個class添加新的方法或成員。
總結起來,class和extension的使用場景和目的略有不同。class用於創建對象和定義對象的行為和狀態,而extension用於為現有class添加新的方法或成員,以提供額外的功能或extension能力。
如果您需要修改原始class的行為或創建繼承關係,那麼在class內部添加新的方法或成員可能更適合。 為現有class添加一些新的功能或extension現有功能,而不修改原始class的代碼,那麼extension是一個不錯的選擇。選擇何種方式取決於您的需求和設計考慮。
- "m++ , ++m , --m , m-- "這些在程式運行後給出的結果為?
//++m
int m = 5;
int result = ++m;
print(result); // 输出: 6 -->程式輸出時會以這裡結果輸出
print(m); // 输出: 6
//m++
int m = 5;
int result = m++;
print(result); // 输出: 5-->程式輸出時會以這裡結果輸出
print(m); // 输出: 6
不要看最後m值都一樣,應該看第一狀態已這舉例為result才是電腦輸出結果
- mixin 跟 implements差別
implements | mixin | |
實現的方式 | 通過實現接口來實現代碼復用 | mixin 是通過混入一組方法和屬性來實現代碼復用 |
接口要求 | 使用 implements 實現接口時,需要提供接口中定義的所有方法和屬性的具體實現 | 使用 mixin 時,可以選擇性地混入所需的方法和屬性,不需要提供所有的實現 |
繼承關係 | 可以與繼承一起使用,一個類可以同時實現多個接口 | 一種代碼組合機制,不涉及繼承關係 |
代碼復用的方式 | 用於實現接口的約定,將多個類統一起來,以便進行多態操作 | mixin 主要用於在類之間共享和復用代碼,提供一種更靈活的組合方式 |
總結來說,implements 用於實現接口的約定和多態操作,而 mixin 用於代碼的組合和重用,提供了一種更靈活的代碼復用機制。具體使用哪種方式取決於你的需求和設計目標。
參考mixin程式碼