在C#一個如何可以定義是所有派生/實施類型實現的靜態方法?我知道你不能在界面中定義一個靜態方法。靜態方法共享在所有的實施類型
基本前提是這樣的:
例如說我有一個基類生物的。 派生類型將是人類和狗。
我希望能還給我說,一個給定的生物體具有腿的數量的方法。因此,人類將爲2,狗是4等
我能做出這樣的方法的實例方法,但它並沒有多大意義,因爲它的將是對所有類型的狗同樣的方法,和同爲人類的所有類型等等
在C#一個如何可以定義是所有派生/實施類型實現的靜態方法?我知道你不能在界面中定義一個靜態方法。靜態方法共享在所有的實施類型
基本前提是這樣的:
例如說我有一個基類生物的。 派生類型將是人類和狗。
我希望能還給我說,一個給定的生物體具有腿的數量的方法。因此,人類將爲2,狗是4等
我能做出這樣的方法的實例方法,但它並沒有多大意義,因爲它的將是對所有類型的狗同樣的方法,和同爲人類的所有類型等等
我不認爲你完全理解OO。將它作爲實例方法是非常有意義的。如果你有2只狗(一個名爲幸運)
會發生什麼,並幸運被車失去一條腿打?在你的模型中,整個狗種都失去了一條腿?
但在一個更好的模型:
#psudo
class Organism{
public abstract void legs(){ return 0;}
}
class Dog : Organism{
private int _legs;
public int legs(){ return _legs; }
}
那麼幸運只會失去了一條腿。
啊,讓我想起我的AP物理課。 Will E. Bounce將以每秒2.4米的速度向北穿過雙車道公路。每條車道寬4米。一輛卡車以每秒30米的速度向東移動。如果卡車在距離200米遠的車道上,並且不會合並,Will E. Bounce? – Scott 2011-04-28 12:49:59
使其成爲實例方法。使用繼承,你的派生類應該實現自己的版本,返回適當的值。
這樣的事情。
abstract class Organism
{
public abstract int NumberOfLegs();
}
abstract class Biped : Organism
{
public sealed override int NumberOfLegs()
{
return 2;
}
}
abstract class Quadroped : Organism
{
public sealed override int NumberOfLegs()
{
return 4;
}
}
class Humand : Biped
{
}
class Dog : Quadroped
{
}
但是我會擔心使用這樣的分類,甚至更擔心在這些假設中烘烤。也就是說,靜態類型語言的一個好處是,當你需要重新審視一個錯誤的假設時,它會迫使你查看所有依賴這個假設的代碼......這是一件好事。
另請參閱http://stackoverflow.com/questions/248263/why-cant-i-declare-c-methods-virtual-and-static – 2011-04-28 02:36:47