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

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(使用前将#替换为@)

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

  • C 中的分段错误

    我需要用 0 填充二维数组 但编译后的程序会出现此错误 怎么了 int main int vert 1001 1001 int hor 1001 1001 int dudiag 1416 1416 int uddiag 1416 1416
  • 在 DefaultHttpContext 上使用 FeatureCollection 时,响应对象为 null

    我正在测试一些 net Core 中间件 并希望使用整个 asp net Core http 管道来运行中间件 而不是模拟它 问题是 当我使用特征集合时 不知何故 响应对象没有在 httpRequest 中设置 并且它在请求本身上是只读的
  • 有哪些 API 可在 Windows 中使用 C# 配置扬声器设置?

    我环顾了很多不同的地方 但似乎找不到一个简单的方法来做到这一点 我在 Windows 7 中有多个声卡 并使用 HDMI 将声音输出到我的 AVR 放大器 我遇到的问题是 当放大器关闭时 它会导致窗口丢失扬声器配置 所以我想做的是编写一个小
  • 了解 MVC-5 身份

    我创建了一个新的ASP NET MVC 5申请与Individual User Accounts然后更新了所有的Nuget packages在解决方案中 现在我尝试遵循一些教程中显示的一些指南 但遇到了一些问题 第一个是一个名为Applic
  • 为什么Boost在“程序选项”中使用全局函数覆盖来实现自定义验证器

    这个例子 http www boost org doc libs 1 55 0 doc html program options howto html idp163429032显示一个名为validate在全局范围内定义重载函数boost
  • 使用成员函数作为 std::shared_ptr 的自定义删除器时出现问题

    我正在尝试弄清楚如何将 std shared ptr 与自定义删除器一起使用 具体来说 我将其与 SDL Surface 一起使用 如下所示 std shared ptr
  • 最小对的总和

    Given 2N点 in a 2D plane 你必须将它们分组为N pairs使得所有对的点之间的距离的总和是最小可能值 所需的输出只是总和 换句话说 如果a1 a2 an分别是第一对 第二对 和第 n 对点之间的距离 则 a1 a2 a
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • 复杂的 C 声明

    我刚刚在互联网上浏览了一些代码 发现了这个 float foo SIZE SIZE 我如何阅读这份声明 是否有一套特定的规则来阅读如此复杂的声明 我有一段时间没做这个了 从 开始foo然后向右走 float foo SIZE SIZE fo
  • C# Linq 可以做组合数学吗?

    我有这个数据结构 class Product public string Name get set public int Count get set var list new List
  • 如何在 C# 中通过 JavaScript 回调运行 QUnit 测试并获取测试结果?

    在我的几个项目中 我使用 MVC 模式将代码 关注点 分为 3 层 模型层和控制层都在 C 上运行 因此我使用 MSTest 或 NUnit 等测试框架来验证这些层的功能需求 对于视图层 我使用 QUnit 来测试 JavaScript 文
  • C语言中如何将整数转换为字符? [复制]

    这个问题在这里已经有答案了 C语言中如何将整数转换为字符 C 中的字符已经是数字 字符的 ASCII 代码 无需转换 如果要将数字转换为相应的字符 只需添加 0 即可 c i 0 0 是 ASCii 表中的一个字符
  • Global.asax 错误处理程序或自定义 IHttpModule 错误处理程序未捕获未处理的异常

    我有一个类 DPCal EventMove 的一种方法 我想限制使用角色的访问 我有一个 Global asax cs 错误处理程序和一个自定义 IHttpModule 错误处理程序 旨在捕获未处理的异常 并将它们 Server Trans
  • 在发送传出请求之前将新的 SoapClient 绑定到特定 IP 地址

    假设应用程序所在的计算机具有 SoapClient 具体来说 我正在使用 Microsoft Web Service3 Messaging SoapClient 它通过发送传出请求并获取 SoapEnvelope 作为回报 完善的流程 与远
  • C# 编译器编译 .txt .obj .java 文件

    using System class Program public static void Main Console WriteLine Hello World Console ReadLine 我将文件另存为1 java 2 obj an
  • Azure Function App Azure 服务总线触发器触发两次

    我使用带有服务总线触发器的 Azure Function Apps 来读取服务总线并对服务总线消息的内容执行操作 服务总线接收 JSON 序列化对象 然后将 JSON 消息反序列化回 Function App 中的对象 然而 由于某种原因
  • NuGet 解决包依赖项的错误版本

    所以我有一个包 NServiceBus Host 依赖于 NServiceBus gt 4 5 0 在 nuget 上有一个 4 5 1 版本的 NServiceBus 当我安装包 NServiceBus Host 时 我得到 PM gt
  • 没有运算符“<<”与这些操作数匹配[重复]

    这个问题在这里已经有答案了 不知道发生了什么事 我查看了与此问题类似的其他帖子 但到目前为止没有解决方案有帮助 这是带有错误部分注释的代码 在某一时刻 它说 不起作用 而在代码的其余部分中 它说 include
  • 字符串常量之前应有非限定 ID

    我目前正在编写一个 C 应用程序 它与 math h 结合实现了振荡器 我拥有的代码应该可以很好地用于该应用程序 尝试编译目标文件 但是我遇到编译器错误 很可能与语法 等有关 我认为这与命名空间有关 错误 终端输出 User Name Ma
  • 如何使用字符串的值将字符串转换为 wstring?

    我是 C 新手 我有这个问题 我有一个名为 DATA DIR 的字符串 需要将其格式化为 wstring string str DATA DIR std wstring temp L s str Visual Studio 告诉我没有与参数

随机推荐

  • 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