gpt4 book ai didi

c# - 如何使用反射访问显式实现的方法?

转载 作者:太空狗 更新时间:2023-10-29 21:10:59 27 4
gpt4 key购买 nike

通常,我会像这样在反射中访问一个方法:

class Foo
{
public void M () {
var m = this.GetType ().GetMethod ("M");
m.Invoke(this, new object[] {}); // notice the pun
}
}

但是,当 M 是一个显式实现时,这会失败:

class Foo : SomeBase
{
void SomeBase.M () {
var m = this.GetType ().GetMethod ("M");
m.Invoke(this, new object[] {}); // fails as m is null
}
}

如何使用反射访问显式实现的方法?

最佳答案

因为方法名不是"M",而是"YourNamespace.SomeBase.M"。因此,您要么需要指定该名称(连同适当的 BindingFlags),要么从接口(interface)类型中获取方法。

所以给定以下结构:

namespace SampleApp
{
interface IFoo
{
void M();
}

class Foo : IFoo
{
void IFoo.M()
{
Console.WriteLine("M");
}
}
}

...你可以这样做:

Foo obj = new Foo();
obj.GetType()
.GetMethod("SampleApp.IFoo.M", BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(obj, null);

...或者这个:

Foo obj = new Foo();
typeof(IFoo)
.GetMethod("M")
.Invoke(obj, null);

关于c# - 如何使用反射访问显式实现的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650575/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com