如何从自己的类调用扩展方法而不进行强制转换?

2023-12-27

我正在尝试打电话扩展方法在我自己的课程上,但无法编译。考虑以下代码行:

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

有人可以向我解释一下吗?当我进行演员表时,一切似乎都很好:

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

有什么解释吗?


The cast没有必要-this部分是。所以这工作正常:

return this.HelloWorld();

第 7.6.5.2 节明确讨论了以下形式的方法调用

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

这个调用:

HelloWorld()

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

我现在还不清楚why语言就是这样设计的(即为什么“隐式这一点”被排除在外),也许埃里克·利珀特(Eric Lippert)稍后会添加对此效果的答案。 (答案很可能是这样的:“因为规范、实现和测试需要很长时间,而收益相对较小。”)但是,这个答案至少表明 C# 编译器坚持规范。 ..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从自己的类调用扩展方法而不进行强制转换? 的相关文章

随机推荐

  • required 和 ng-required 和有什么区别?

    有什么区别required and ng required 表单验证 AngularJS 表单元素寻找required属性来执行验证功能 ng required允许您设置required属性取决于布尔测试 例如 仅需要字段 B 比如说学生号
  • PhantomJS 已崩溃 - 致命 Windows 异常,代码 0xc0000005

    我们使用 EmberJS 构建了一个应用程序 当我们使用以下命令测试应用程序时 我们收到一条失败消息ember test 这里我提到了错误信息 操作系统 Windows 8 64位 PhantomJS 2 1 1 PhantomJS err
  • 字节数组到十六进制字符串

    我将数据存储在字节数组中 如何将此数据转换为十六进制字符串 我的字节数组的示例 array alpha 133 53 234 241 Using str format http docs python org 2 library stdty
  • 从已加载的 Magento 模型中检索附加数据

    在某些情况下 我收到的模型仅包含我需要的一些数据 例如catalog product不包含我可能需要使用的某些属性的实例 例如尺寸 小部件数量或腰围尺寸 为了缓解这个问题 我目前的选择是 创建一个新块 并使用手动加载所需的属性addAttr
  • 在 React Native 应用程序中禁用屏幕捕获/屏幕截图

    我遇到过一些专门针对 ios 和 Android 的解决方案 用于防止屏幕捕获和截屏 但是如何在 React Native 中禁用屏幕捕获呢 Android Inside android app src main java com Proj
  • 如何在选择查询中生成自动增量字段

    例如我有一个有 2 列的表 first name and last name具有这些值 Ali Khani Elizabette Amini Britney Spears 我想写一个select生成如下表的查询 1 Ali Khani 2
  • Visual Studio 2015 Update 2 团队资源管理器缺少“排除”

    我一直在 Visual Studio 2015 的 Team Explorer 部分中使用 Git 集成 我的解决方案中有许多配置文件需要修改 以便应用程序在本地运行 但我不想提交这些更改 在 VS2015 Update 1 中 Git 集
  • Google Sheets、带有服务帐户的 JWT 客户端

    我要拔头发了 帮助 更新 我正在使用 google auth library v1 0 0 和 googleapis v24 0 0 const JWT require google auth library var google requ
  • 如何使用 NLTK 分词器去除标点符号?

    我刚刚开始使用 NLTK 不太明白如何从文本中获取单词列表 如果我使用nltk word tokenize 我得到单词和标点符号的列表 我只需要文字 我怎样才能摆脱标点符号 还word tokenize不适用于多个句子 点被添加到最后一个单
  • Slick 3.1 - 检索列的子集作为案例类

    我正在使用 Slick 3 1 1 问题是在某些情况下我想省略一些相当重的列 但仍然将该列的子集具体化为案例类 考虑下面的表定义 class AuditResultTable tag Tag extends Table AuditResul
  • 如何在Unity3d中谷歌表单的另一个部分添加值

    如何在 unity3d 中的 Google 表单的其他部分添加价值 我只能在第 1 部分添加值 在其他部分添加值时遇到问题 这是代码 public GameObject username public GameObject email pu
  • C#中通过名称获取变量

    有没有一种方法可以通过知道变量的名称来获取变量的值 如下所示 double temp double MyClass GetValue VariableName 当我通常像这样访问变量时 double temp MyClass Variabl
  • Windows 窗体的 BackgroundWorker 替代品

    是否可以在 Windows 窗体应用程序中执行类似的操作 我正在尝试寻找其他更新 UI 的方法 而不是一直使用 BackgroundWorker 也许是这样的 public List
  • 从 JAVA 应用程序使用 SSL 连接到 MongoDb

    我有一个MongoDb实例运行 单实例 SSL已启用 我可以通过以下方式连接到它RoboMongo在哪里SSL选项卡我提供以下内容 CA File path to my certificate testCA pem PEM certific
  • C# 中的多页打印文档

    请有人帮助我 我必须在 C 中打印多页文档 我通过互联网然后使用了这段代码但不起作用 打印一页后循环再次开始 private void printDocument1 PrintPage object sender System Drawin
  • 为什么当另一个线程正在运行时 NSTimer 会被阻塞?

    我正在尝试在 iPhone 上的后台运行一项冗长的任务 我开始它performSelectorInBackground 我还创建了一个NSTimer在主线程上只是为了检查事情是否正常 我预计计时器会在另一个线程执行该操作时运行 void v
  • 重写 DeviseController 基类 - Rails 4、Devise 3

    我正在尝试重写设计方法set flash message https github com plataformatec devise blob master app controllers devise controller rb L145
  • Javascript 替换左括号和右括号

    例如 我有一串文本 text1 text2 text3 我想用 替换 字符 用 替换 字符 但仅在这种情况下 当 后面跟着 时 例如 text1 text2 text3 应该导致 text1 text2 text3 如何使用 Javascr
  • 线性布局中按钮的边距

    我正在创建一些按钮并将它们添加到线性布局中 其定义为
  • 如何从自己的类调用扩展方法而不进行强制转换?

    我正在尝试打电话扩展方法在我自己的课程上 但无法编译 考虑以下代码行 public interface IHelloWorld public static class Extensions public static string Hell