1

给定一组具有一组通用属性和方法以支持给定域逻辑的对象,是否有一种方法可以强制在这些对象上存在某些静态方法?

我得出的结论是,实现接口并不能实现这一点(方法只是实例),并且不能将静态方法标记为覆盖、虚拟或抽象。

提前致谢。

4

2 回答 2

4

不。

(注意:在 F# 中,您可以使用“内联”函数和“^”类型(例如,对于所有类型 T,其中 T 具有返回“int”的静态方法 ToInt(T))来表达此类约束。编译器有效地自动扩展每个调用站点到特定类型。)

于 2009-03-28T04:11:24.253 回答
3

强制类型具有静态成员的唯一方法是从它继承。所有类型都将具有静态成员,如果您需要在派生类型上覆盖它们,您可以使用“new”关键字:

static void Main(string[] args)
{
    Console.WriteLine(Base.Hello());
    Console.WriteLine(Derived.Hello());
    Console.Read();
    /* output will be:
    Hello
    World
    */
}

public class Base
{
    public static object Hello()
    {
        return "Hello";
    }
}

public class Derived : Base
{
    public static new object Hello()
    {
        return "World";
    }
}

它与抽象/覆盖并不完全相同,但从消费者的角度来看,工作方式类似。

于 2009-03-28T04:12:06.127 回答