所有实现类型之间共享的静态方法
本文关键字:共享 静态方法 之间 类型 实现 | 更新日期: 2023-09-27 17:53:16
在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
{
}
但我会担心使用这样的分类法,甚至更担心在这些假设中发酵。也就是说,静态类型语言的一个好处是,当您确实需要重新访问一个错误的假设时,它迫使您查看依赖于该假设的所有代码……