我在C#中有一个同时具有静态和非静态接口的类.可以在具有相同名称和签名的类中使用静态和非静态方法吗?
当我尝试执行此操作时遇到编译器错误,但是由于某种原因,我认为有一种方法可以执行此操作.我是错误的还是没有办法在同一个类中同时使用静态和非静态方法?
如果这不可能,是否有一种很好的方法来实现可普遍应用于任何情况的类似内容?
EDIT
从我收到的答复来看,显然没有办法做到这一点.我要使用其他命名系统来解决此问题。
最新回答
- 2021-1-111 #
- 2021-1-112 #
实际上, 一种是通过显式实现接口来实现此目的的方法.这不是一个完美的解决方案,但在某些情况下可以使用。
interface IFoo { void Bar(); } class Foo : IFoo { static void Bar() { } void IFoo.Bar() { Bar(); } }
有时在为P / Invoke调用创建包装类时会遇到这种情况。
- 2021-1-113 #
您可以从实例方法中调用静态方法,而不必指定类型名称:
class Foo { static void Bar() { } void Fizz() { Bar(); } }
...因此,不允许您使用具有相同签名的静态方法和实例方法是有道理的。
您要完成什么? 在不了解具体细节的情况下很难提出解决方法.我只是重命名其中一种方法。
- 2021-1-114 #
C#的设计不完善...
虽然确实需要全局变量或非全局变量,但默认情况下它应该选择一个,如果想要另一个,则只需对其进行更多限定。
class Logger { public static Logger instance; public static void Log(string message) { instance.Log(message); // currently the compiler thinks this is ambiguous, but really its not at all. Clearly we want the non-static method } public void Log(string message) { } public void DoStuff() { Log("doing instance stuff"); // this could be ambiguous, but in my opinion it should default to a call to this.Log() Logger.Log("doing global stuff"); // if you want the global qualify it explicitly } }
- 2021-1-115 #
可以使用具有相同名称的静态方法和实例方法,只要它们的声明在参数的数量或类型上有所不同即可.关于如何在一个类中拥有两个具有相同名称的实例方法,这是相同的规则。
尽管从技术上讲,在静态方法与实例方法的情况下,它们已经因实例方法中隐式this参数的存在而有所不同,但这种差异不足以使编译器确定要调用的是哪两个方法
Update : 我犯了一个错误.返回值不足以具有不同的签名。
相关问题
- c#:获取windows 8自动颜色主题的活动颜色c#netwpfwinapiwindows82021-01-12 01:28
- c#:实例字段与局部变量的初始化c#netclr2021-01-11 19:57
- c#:并行执行任务c#netasynchronousasyncawaittaskparallellibrary2021-01-11 04:56
- c#:RequestUrlReferrer为空?c#netvisualstudiovisualstudio20082021-01-11 07:24
- c#:NET 40和可怕的OnUserPreferenceChanged挂起c#netmultithreadingclrdeadlock2021-01-11 12:56
不,您不能.进行限制的原因是,也可以从非静态上下文中调用静态方法,而无需添加类名(因此,可以使用MyStaticMethod()代替MyClass.MyStaticMethod()).如果两者兼有,编译器将无法确定您要查找的内容.
您可以使用具有相同名称的静态和非静态方法,但是不同的参数遵循与方法重载相同的规则,它们不能具有完全相同的签名。