给定一组具有支持给定域逻辑的通用属性和方法的对象,是否有办法在这些对象上强制存在某些静态方法?
我已经得出结论,实现接口不能实现这一点(方法只是实例),并且静态方法不能被标记为override,virtual或abstract。
提前致谢。
答案 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";
}
}
它与抽象/覆盖不完全相同,但从消费者的角度来看,它的工作方式类似。