所有实现类型之间共享的静态方法



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

基本前提是这样的:

比如说,我有一个基类有机体。派生类型为Human和Dog。

我想要一种方法,它可以返回给我说一个给定的有机体有多少条腿。所以人是2,狗是4,等等。

我可以让这样的方法成为一个实例方法,但它没有多大意义,因为它对所有的狗类型都是相同的方法,对所有的人类类型也是相同的,等等

我认为你没有完全理解OO。让它成为一个实例方法是很有意义的。

如果你有两只狗(一只叫lucky),而lucky被一辆失去一条腿的车撞了,会发生什么?用你的模型整个狗种都失去了一条腿?

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

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

那么lucky只会失去一条腿。


让它成为一个实例方法。使用继承,你的派生类应该实现它们自己的版本来返回适当的值。

就像这样。

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
{
}

但我会担心使用这样的分类法,甚至更担心在这些假设中发酵。也就是说,静态类型语言的一个好处是,当您确实需要重新访问一个错误的假设时,它迫使您查看依赖于该假设的所有代码……

最新更新