要求C#中存在静态方法

时间:2009-03-28 04:06:25

标签: c# generics static methods constraints

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

我已经得出结论,实现接口不能实现这一点(方法只是实例),并且静态方法不能被标记为override,virtual或abstract。

提前致谢。

2 个答案:

答案 0 :(得分:4)

没有

(注意:在F#中你可以使用“内联”函数和“^”类型来表达这样的约束(例如forall类型T,其中T有一个返回'int'的静态方法ToInt(T)。)编译器有效自动 - 将每个呼叫站点扩展到特定类型。)

答案 1 :(得分: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";
    }
}

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