在c#中如何定义一个由所有派生/实现类型实现的静态方法?我知道你无法在界面中定义静态方法。
基本前提是这样的:
比如说我有一个生物基类。 衍生类型将是人类和狗。
我想要一种方法,可以告诉我特定生物体的腿数。所以人类将是2,狗将是4,等等。
我可以将这样的方法作为实例方法,但它没有多大意义,因为它对所有Dog类型都是相同的方法,对所有Human类型都是相同的。
答案 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
{
}
但是我担心使用这样的分类法,更担心在这些假设中烘焙。也就是说,关于静态类型语言的一个好处是,当你确实需要重新审视一个错误的假设时,它会强迫你查看依赖于这个假设的所有代码......这是一件好事。