2011-04-28 51 views
0

在C#一個如何可以定義是所有派生/實施類型實現的靜態方法?我知道你不能在界面中定義一個靜態方法。靜態方法共享在所有的實施類型

基本前提是這樣的:

例如說我有一個基類生物的。 派生類型將是人類和狗。

我希望能還給我說,一個給定的生物體具有腿的數量的方法。因此,人類將爲2,狗是4等

我能做出這樣的方法的實例方法,但它並沒有多大意義,因爲它的將是對所有類型的狗同樣的方法,和同爲人類的所有類型等等

+0

另請參閱http://stackoverflow.com/questions/248263/why-cant-i-declare-c-methods-virtual-and-static – 2011-04-28 02:36:47

回答

6

我不認爲你完全理解OO。將它作爲實例方法是非常有意義的。如果你有2只狗(一個名爲幸運)

會發生什麼,並幸運被車失去一條腿打?在你的模型中,整個狗種都失去了一條腿?

但在一個更好的模型:

#psudo 
class Organism{ 
    public abstract void legs(){ return 0;} 
} 
class Dog : Organism{ 
    private int _legs; 
    public int legs(){ return _legs; } 
} 

那麼幸運只會失去了一條腿。


+0

啊,讓我想起我的AP物理課。 Will E. Bounce將以每秒2.4米的速度向北穿過雙車道公路。每條車道寬4米。一輛卡車以每秒30米的速度向東移動。如果卡車在距離200米遠的車道上,並且不會合並,Will E. Bounce? – Scott 2011-04-28 12:49:59

0

使其成爲實例方法。使用繼承,你的派生類應該實現自己的版本,返回適當的值。

0

這樣的事情。

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 
{ 

} 

但是我會擔心使用這樣的分類,甚至更擔心在這些假設中烘烤。也就是說,靜態類型語言的一個好處是,當你需要重新審視一個錯誤的假設時,它會迫使你查看所有依賴這個假設的代碼......這是一件好事。

相關問題