在所有实现类型中共享的静态方法

时间:2011-04-28 02:31:22

标签: c# interface

在c#中如何定义一个由所有派生/实现类型实现的静态方法?我知道你无法在界面中定义静态方法。

基本前提是这样的:

比如说我有一个生物基类。 衍生类型将是人类和狗。

我想要一种方法,可以告诉我特定生物体的腿数。所以人类将是2,狗将是4,等等。

我可以将这样的方法作为实例方法,但它没有多大意义,因为它对所有Dog类型都是相同的方法,对所有Human类型都是相同的。

3 个答案:

答案 0 :(得分:6)

我不认为你完全理解OO。将它作为实例方法是完全合理的。

如果你有2只狗(一只名叫幸运儿),幸运会被一条失去一条腿的汽车击中,会发生什么?有了你的模型,整个狗只失去了一条腿?

但是在一个更好的模型中:

#psudo 
class Organism{
   public abstract void legs(){ return 0;}
}
class Dog : Organism{
   private int _legs;
   public int legs(){ return _legs; }
}
然后幸运的是会失去一条腿。


答案 1 :(得分:0)

将其设为实例方法。使用继承,派生类应该实现自己的版本,返回适当的值。

答案 2 :(得分: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
{

}

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