静态虚拟方法有意义的场景

时间:2010-09-14 14:58:01

标签: c# static virtual

我知道virtualstatic方法是相反的概念,但我认为有时将它们结合使用是有意义的。在这个主题上有很多关于SO的类似问题,但是还没有涉及以下场景。

有一个C#界面,如下所示:

interface IVertexMeshLoader
{
    VertexMesh LoadFromFile(string fname);
}

实现可能如下所示:

class VertexMeshLoaderObj : IVertexMeshLoader
{
    public VertexMesh LoadFromFile(string fname) { .. }
}

现在我希望能够在没有对象实例的情况下调用方法,但我无法使LoadFromFile()方法成为静态,因为它实现了接口。

到目前为止,我制定的最佳解决方案是编写一个包含实际代码的静态方法LoadFromFileStatic()LoadFromFile()然后只是调用它。不是很漂亮,imho。

每次我想调用方法时,我也可以创建VertexMeshLoadObj的实例,但情况更糟。

有更好的方法吗?谢谢: - )

3 个答案:

答案 0 :(得分:3)

这是另一种选择。提供仅调用静态方法的接口的显式实现。它允许它们具有相同的名称

class VertexMeshLoaderObj : IVertexMeshLoader
{
  VertexMesh IVertexMeshLoader.LoadFromFile(string fname) { 
    LoadFromFile(fname);
  }
  public static VertexMesh LoadFromFile(fname) {
    ...
  }
}

答案 1 :(得分:0)

如果必须这样做,请创建IVertexMeshLoader的单例实例并访问

答案 2 :(得分:0)

即使您只对对象的vtable感兴趣而不是对实际成员感兴趣,也需要一个对象实例来知道要调用的方法。

因此,即使实际实现似乎并不依赖于实例,它实际上也是如此。

您不是使用“静态虚拟”方法,而是使用虚拟方法。