2011-04-28 52 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 
{ 

} 

但是我会担心使用这样的分类,甚至更担心在这些假设中烘烤。也就是说,静态类型语言的一个好处是,当你需要重新审视一个错误的假设时,它会迫使你查看所有依赖这个假设的代码......这是一件好事。

相关问题