具有相同名称的静态方法和实例方法?

时间:2020-03-06 15:00:07  来源:igfitidea点击:

我在C#中有一个既有静态接口又有非静态接口的类。是否可以在具有相同名称和签名的类中使用静态和非静态方法?

尝试执行此操作时出现编译器错误,但是由于某种原因,我认为有一种方法可以执行此操作。我是错的还是没有办法在同一个类中同时使用静态方法和非静态方法?

如果无法做到这一点,是否有一种很好的方法来实现可以普遍应用于任何情况的类似内容?

编辑
从我收到的答复来看,显然没有办法做到这一点。我要使用其他命名系统来解决此问题。

解决方案

我们可以从实例方法中调用静态方法,而不必指定类型名称:

class Foo
{
    static void Bar()
    {
    }

    void Fizz()
    {
        Bar();
    }
}

...这样就可以避免我们使用具有相同签名的静态方法和实例方法。

你想达到什么目的?在不了解具体细节的情况下很难提出解决方法。我只是将其中一种方法重命名。

只要它们的声明在参数的数量或者类型上有所不同,就可以使静态方法和实例方法具有相同的名称。关于如何在一个类中拥有两个具有相同名称的实例方法,这是相同的规则。

尽管从技术上讲,在静态方法与实例方法的情况下,它们已经因实例方法中隐式this参数的存在而有所不同,但这种差异不足以使编译器确定要调用的是哪两个。

更新:我弄错了。返回值不足以具有不同的签名。

不,你不能。进行限制的原因是,也可以从非静态上下文中调用静态方法,而无需添加类名(因此,可以使用MyStaticMethod()代替MyClass.MyStaticMethod())。如果两者都存在,编译器无法告诉我们要查找的内容。

我们可以使用具有相同名称的静态和非静态方法,但是不同的参数遵循与方法重载相同的规则,它们不能具有完全相同的签名。