正式地來說,應該download here, 可惜該網頁的 download mamanger.
Windows Vista 的 UAC,一直是我所喜愛的功能,雖然它會不斷的跳出對話框來打斷我。但為了防毒,心干情願矣。
但看來很多人仍習慣 XP以前的超大權限,一點也不怕病毒。(我在氣勢上就輸了)
Windows 7 的UAC則多增加了設定。有四個層級可設定彈跳視窗
個人喜好的問題,還是1,也就是最嚴格的設定。
3 則是微軟最大的讓步了呢。此當作預設值果然是符合行銷的手法。
如果您選4,那就代表您真的很有勇氣了。
使用一模一樣的資料庫,一個 run 在 SQL Server 2005, 一個則是 SQL Server 2000。
開發時使用 Linq to SQL連線到 2000 的資料庫。
執行時分別連線到 2000 及 2005.
發現執行的結果是一樣的,但使用 profiler 看到的 sql script 卻完全不同。
由於目前測試的是客戶的專案,不能放到這裡來公佈。
只能說,SQL Server 2000 趕快放棄吧。
所有的程式寫作的開發方式,其實都是下面三個的混合
一次針對一個 Use case 下一個 scenario 進行開發。再逐步完成該Use case 下所有的scenario。完成該Use case 下所有的scenario後才對下一個 Use case 開發
一次對針一個系統行為的特色來開發。
針點系統的一個功能寫出 test cases。寫程式的目的就是通過所有的 test cases
如果不透過繼承,又希望從別的類別得到好處。可使用
一台轎車,如果想要可以欣賞音樂的能力,不是透過繼承(畢竟車子不是音響),而是在車子內加裝汽車音響。
因此,轎車內需要放音樂的能力時,只需要打開汽車音響即可。
class 轎車
{
private 汽車音響 a汽車音響 = new 汽車音響();
public void 欣賞音樂()
{
a汽車音響.打開();
}
}
或者,隨時找到一台音響再打開
class 轎車
{
public void 欣賞音樂()
{
汽車音響 a汽車音響 = new 汽車音響(); //隨時想有就可以有?這大概是軟體世界才有的能力
a汽車音響.打開();
}
}
一個士兵,需要有攻擊的能力,但士兵畢竟不是武器,因此士兵需要有武器。到目前為止就像委派。
但是,武器有許多種,如飛彈、槍、劍,每一種的攻擊方式都不同。
注意到 weapon 是可替換的,只要有實作 IWeapon 的武器就可以。換句話說,一整族IWeapon的武器都可以替換。
另外,weapon 是天生就存在於 Soldier 內的。一旦 Soldier 被 destoryed, weapon 就不存在了。
class Soldier
{
private IWeapon weapon = new Sword();
public void Attack()
{
weapon.Attack();
}
}
interface IWeapon
{
void Attack();
}
class Sword : IWeapon
{
public void Attack() { }
}
aggregation 與 Composition 類似,但結構更鬆散,更容易 resuse。上述的例子,weapon 只能生存在 Soldier 的生命週期內,並不合理。如果改成下面的例子,就是 aggregation 了。注意到 weapon 是由建構子傳進去的。當soldier1 被destoryed 後,sword 並不隨之消減。也就是說,可以被 soldier2 再拿去用。
class Soldier
{
private IWeapon weapon;
public Soldier(IWeapon weapon)
{
this.weapon = weapon;
}
public void Attack()
{
weapon.Attack();
}
}
interface IWeapon
{
void Attack();
}
class Sword : IWeapon
{
public void Attack() { }
}
class Program
{
static void Main(string[] args)
{
Sword sword = new Sword();
Soldier soldier1 = new Soldier(sword);
soldier1.Attack();
}
}
LSP (替換原則) 是談何謂「良好的繼承」。