我正在使用c#.
我有课
class A
{
public void MyMethod(int x){//Do something...};
}
Run Code Online (Sandbox Code Playgroud)
如何在MyMethod不创建实例的情况下调用Class A?
我可以使用委托/动作或其他方式来做到这一点吗?
*无需将MyMethod更改为静态功能
谢谢
Jon*_*eet 10
你可以这样做......但你真的,真的不应该:
// DO NOT USE THIS CODE
using System;
public class Evil
{
public void Method()
{
Console.WriteLine($"Is this null? {this == null}");
}
}
class Test
{
static void Main()
{
var method = typeof(Evil).GetMethod("Method");
var action = (Action<Evil>) Delegate.CreateDelegate(typeof(Action<Evil>), method);
action(null);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Is this null? True
Run Code Online (Sandbox Code Playgroud)
该CreateDelegate调用创建一个打开的实例委托.来自MSDN:
在.NET Framework 2.0版中,此方法重载也可以创建开放实例方法委托; 也就是说,明确提供实例方法隐藏的第一个参数的委托.有关详细说明,请参阅更一般的CreateDelegate(Type,Object,MethodInfo)方法重载,它允许您为实例或静态方法创建打开或关闭委托的所有组合,并可选择指定第一个参数.
然后,我们通过调用该方法null作为参数,因此该方法被调用,this是null.
但你绝对不应该这样做,如果面试官真的希望你知道这一点,那么这更多的是对他们的反思而不是对你的反思.
实例方法显然是在实际实例上调用的.
| 归档时间: |
|
| 查看次数: |
3494 次 |
| 最近记录: |