gpt4 book ai didi

c# - 如何在不强制转换的情况下从自己的类调用扩展方法?

转载 作者:可可西里 更新时间:2023-11-01 08:54:51 27 4
gpt4 key购买 nike

我试图在我自己的类上调用一个扩展方法,但它无法编译。考虑以下代码行:

public interface IHelloWorld
{
}

public static class Extensions
{
public static string HelloWorld(this IHelloWorld ext)
{
return "Hello world!";
}
}

public class Test : IHelloWorld
{
public string SaySomething()
{
return HelloWorld();
}
}

基本上我是在界面上进行扩展。我不断收到此错误:

The name 'HelloWorld' does not exist in the current context

有人能给我解释一下吗?当我做 Actor 时,一切似乎都很好:

return ((Test)this).HelloWorld();

有什么解释吗?

最佳答案

cast 不是必需的 - this 部分是。所以这很好用:

return this.HelloWorld();

7.6.5.2节明确讲了窗体的方法调用

expr.identifier ( )
expr.identifier ( args )
expr.identifier < typeargs > ( )
expr.identifier < typeargs > ( args )

这个调用:

HelloWorld()

不是那种形式,因为不涉及表达式。

我不是很清楚为什么语言是这样设计的(即为什么“隐含的这个”被排除在外),也许 Eric Lippert 稍后会添加一个答案。 (答案很可能是“因为规范、实现和测试需要很长时间,而 yield 相对较少。”)但是,这个答案至少表明 C# 编译器坚持规范。 ..

关于c# - 如何在不强制转换的情况下从自己的类调用扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9772148/

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