我在C#中有一个同时具有静态和非静态接口的类.是否可以在具有相同名称和签名的类中使用静态和非静态方法?
当我尝试这样做时,我遇到编译器错误,但出于某种原因,我认为有一种方法可以做到这一点.我错了还是没有办法在同一个类中同时使用静态和非静态方法?
如果这是不可能的,有没有一种很好的方法来实现这样的东西,可以适用于任何情况?
编辑
从我收到的回复来看,很明显没有办法做到这一点.我将使用不同的命名系统来解决这个问题.
不,你不能.限制的原因是静态方法也可以从非静态上下文调用,而不需要预先添加类名(因此MyStaticMethod()而不是MyClass.MyStaticMethod()).如果你有两个,编译器无法分辨你正在寻找哪个.
您可以使用具有相同名称的静态和非静态方法,但遵循与方法重载相同的规则的不同参数,它们不能具有完全相同的签名.
实际上,有一种方法可以通过显式实现接口来实现这一目的.它不是一个完美的解决方案,但它可以在某些情况下工作.
interface IFoo { void Bar(); } class Foo : IFoo { static void Bar() { } void IFoo.Bar() { Bar(); } }
当我为P/Invoke调用创建包装类时,我有时遇到这种情况.
您可以从实例方法调用静态方法,而无需指定类型名称:
class Foo { static void Bar() { } void Fizz() { Bar(); } }
...因此,不允许您拥有静态方法和具有相同签名的实例方法.
你想达到什么目的?如果不了解具体细节,很难提出解决方法.我只是重命名其中一种方法.