没有实例C#的调用方法

Evy*_*tar 1 c#

我正在使用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作为参数,因此该方法被调用,thisnull.

但你绝对不应该这样做,如果面试官真的希望你知道这一点,那么这更多的是对他们的反思而不是对你的反思.

实例方法显然在实际实例上调用的.

  • 总而言之,任何"反思"问题都是一种自我反思 (3认同)