在C#一个如何可以定义是所有派生/实施类型实现的静态方法?我知道你不能在界面中定义一个静态方法。静态方法共享在所有的实施类型
基本前提是这样的:
例如说我有一个基类生物的。 派生类型将是人类和狗。
我希望能还给我说,一个给定的生物体具有腿的数量的方法。因此,人类将为2,狗是4等
我能做出这样的方法的实例方法,但它并没有多大意义,因为它的将是对所有类型的狗同样的方法,和同为人类的所有类型等等
在C#一个如何可以定义是所有派生/实施类型实现的静态方法?我知道你不能在界面中定义一个静态方法。静态方法共享在所有的实施类型
基本前提是这样的:
例如说我有一个基类生物的。 派生类型将是人类和狗。
我希望能还给我说,一个给定的生物体具有腿的数量的方法。因此,人类将为2,狗是4等
我能做出这样的方法的实例方法,但它并没有多大意义,因为它的将是对所有类型的狗同样的方法,和同为人类的所有类型等等
我不认为你完全理解OO。将它作为实例方法是非常有意义的。如果你有2只狗(一个名为幸运)
会发生什么,并幸运被车失去一条腿打?在你的模型中,整个狗种都失去了一条腿?
但在一个更好的模型:
#psudo
class Organism{
public abstract void legs(){ return 0;}
}
class Dog : Organism{
private int _legs;
public int legs(){ return _legs; }
}
那么幸运只会失去了一条腿。
啊,让我想起我的AP物理课。 Will E. Bounce将以每秒2.4米的速度向北穿过双车道公路。每条车道宽4米。一辆卡车以每秒30米的速度向东移动。如果卡车在距离200米远的车道上,并且不会合并,Will E. Bounce? – Scott 2011-04-28 12:49:59
使其成为实例方法。使用继承,你的派生类应该实现自己的版本,返回适当的值。
这样的事情。
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
{
}
但是我会担心使用这样的分类,甚至更担心在这些假设中烘烤。也就是说,静态类型语言的一个好处是,当你需要重新审视一个错误的假设时,它会迫使你查看所有依赖这个假设的代码......这是一件好事。
另请参阅http://stackoverflow.com/questions/248263/why-cant-i-declare-c-methods-virtual-and-static – 2011-04-28 02:36:47