通常我们不能在静态方法内调用非静态方法。但是如果我们使用一个类实例,那么我们可以做到以上。一个类实例如何使我们有可能?为什么在C#中的静态方法中通过类实例调用非静态方法
1
A
回答
7
通常我们不能在静态方法中调用非静态方法。
这是一个过分简化:我们不能通过提供单个方法名称来调用我们自己类中的非静态方法,因为没有默认的“this”对象。当你写
SomeMethod(arg1, arg2);
实例方法中,C#将其解释为
this.SomeMethod(arg1, arg2);
相同的技巧没有一个静态方法里面工作,因为静态方法都以“这个”无法访问。
但是,如果我们使用类实例,那么我们可以做到上述。
这是因为一旦您提供了另一个对象,就没有必要查找“this”对象。
8
问题很简单:哪个实例你试图调用该方法吗?应该假设哪些本地字段?
对于实例方法,这很简单:当您调用SomeInstanceMethod()
时,编译器会添加一个隐含的this.
,因此对这些问题的答案是“当前的”(从技术角度而言,值为arg0
)。所以当你输入SomeInstanceMethod()
时,编译器假设你的意思是this.SomeInstanceMethod()
。
在静态方法的情况下,不存在可以添加的隐式this
。您仍然可以调用实例方法,但您需要明确指定目标实例。 someObj.SomeInstanceMethod()
将工作得很好。请注意,您也可以使用实例方法中的someObj.SomeInstanceMethod()
在不同实例的上下文中调用该方法。
相关问题
- 1. 非静态类中的静态方法和静态类中的静态方法有什么区别?
- 2. 在Dao类中使用静态方法或非静态方法?
- 3. 从Python中的静态方法调用非静态方法
- 4. 非静态类中静态方法的要点是什么?
- 5. 为什么最好从方法的类的实例中静态地调用静态方法?
- 6. 在静态SQLiteDatabase类中调用非静态方法
- 7. 从非静态类动态调用非静态方法的最简单方法?
- 8. 将静态方法放入静态类并将实例方法放入静态类中有什么区别?
- 9. 调用静态类中的非静态方法 - java
- 10. 为什么静态方法在单例实例中不可用?
- 11. 非静态方法无法从Android Studio中的非静态方法调用
- 12. C#,通过静态方法
- 13. 静态方法和非静态方法有什么区别?
- 14. 通过静态和非静态方法访问静态属性?
- 15. 在java中调用非静态方法
- 16. 从C++中的静态方法访问非静态类变量
- 17. 调用一类的非静态方法
- 18. 如何从静态方法调用非静态方法?
- 19. 为什么所有静态方法/变量都在非静态类中?
- 20. 从静态基类方法调用静态派生类方法
- 21. 在静态方法中调用非静态GetType()?
- 22. 非静态类实例中的c#静态变量的行为是什么?
- 23. 为什么实例方法不能覆盖静态方法
- 24. 什么是C#中的“静态方法”?
- 25. 调用静态类方法
- 26. 静态属性调用WPF中的非静态方法
- 27. 如何在静态方法中访问静态和非静态方法
- 28. 在C中调用静态方法#
- 29. 调用非静态方法动态
- 30. 目标C - 在类实现中使用非静态方法