扩展方法需要将类声明为静态

2024-03-02

为什么扩展方法要求声明类是静态的?这是编译器的要求吗?


它在 C# 4 规范的语言规范第 10.6.9 节中规定:

当方法的第一个参数 包括 this 修饰符,即 方法被认为是一个扩展 方法。扩展方法只能是 以非泛型、非嵌套方式声明 静态类。第一个参数为 扩展方法可以没有 除此之外的修饰符,以及 参数类型不能是指针 类型。

我不清楚为什么all这些限制是必要的 - 除了可能的编译器(和语言规范)简单性之外。我可以明白为什么将其限制为非泛型类型是有意义的,但我无法立即明白为什么它们必须是非嵌套的和静态的。我怀疑如果您不必担心当前类型等中包含的类型,它会使查找规则变得相当简单,但我敢说这是可能的。

我怀疑没有这些限制所带来的额外复杂性被认为小于所获得的好处。

编辑:为了清楚起见,我并不是建议将实例方法作为扩展方法是有意义的 - 我建议在嵌套和/或非静态类中使用静态扩展方法是有意义的。

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

扩展方法需要将类声明为静态 的相关文章

  • 为什么“dtoa.c”包含这么多代码?

    我将是第一个承认我对低级编程的整体知识有点稀疏的人 我理解许多核心概念 但我不经常使用它们 话虽这么说 我对需要多少代码感到非常惊讶dtoa c http www netlib org fp dtoa c 在过去的几个月里 我一直致力于用
  • Postsharp 不登录跟踪级别

    我喜欢在跟踪级别记录一些 Postsharp 消息 不幸的是 日志到这个级别没有打印任何输出 所有其他级别都在工作 与控制台或 NLog 后端或从其他类登录时的行为相同 如何启用跟踪级别 应用程序 xaml cs Log Attribute
  • 使用 TCP 套接字在本地代理视频

    我一直对向媒体浏览器添加对视频播客的支持非常感兴趣 我希望用户能够浏览可用的视频播客并从互联网上流式传输它们 这真的很容易 因为媒体播放器等将愉快地播放存在于云中的文件 问题是我想在本地缓存这些文件 因此同一集的后续观看将不涉及流式传输 而
  • 为什么我应该使用内联代码? [复制]

    这个问题在这里已经有答案了 我是一名 C C 开发人员 这里有几个始终困扰我的问题 常规 代码和内联代码之间有很大区别吗 主要区别是什么 内联代码只是宏的一种 形式 吗 选择内联代码时必须进行什么样的权衡 Thanks 表现 正如之前的答案
  • 更改图像颜色与透明背景

    我需要使用 c System Drawings 将透明背景上带有绿色圆圈的图像加载到位图图像中 这是最简单的部分 但是 我需要在将其添加到更大的图像之前更改圆圈的颜色 而不影响周围的透明度 就我而言 我需要将圆圈颜色更改为黄色并将其添加为太
  • Monitor.Pulse & Wait - 意外行为

    http www codeproject com Articles 28785 Thread synchronization Wait and Pulse demystified http www codeproject com Artic
  • 我如何知道向量的实际最大大小? (不使用 std::vector::max_size)

    在在线课程中 我正在学习向量 在其中一个例子中 他们解释说 std vector max size 应该给我向量可以达到的最大大小 我决定测试一下 include
  • 可以通过模板间接访问基类中的私有类型

    我试图在编译时根据类型是否在给定范围内公开可用来选择要使用的类型 最好直接看代码 include
  • _MM_TRANSPOSE4_PS 在 GCC 中导致编译器错误?

    我第一次在 GCC 而不是 MSVC 中编译我的数学库 并经历了所有的小错误 我遇到了一个根本没有意义的错误 Line 284 error lvalue required as left operand of assignment 284号
  • 是否自初始化 'A a = a;'允许吗?

    此代码在运行时在复制构造函数中失败 但编译器 MSVS2008 没有发出警告 您能解释一下 最好引用标准 这段代码是否非法或什么 我理解 A a a 永远不应该写在第一位 但我正在寻找理论背景 class A public A p new
  • 在 Linq 查询中使用动态列名称

    foreach Dimension dimensions in Enum GetValues typeof Dimension var r new ReferenceTable dimensions referenceItems List
  • 使用 FromBase64Transform 解码 base64 文件流

    The example https msdn microsoft com en us library system security cryptography frombase64transform 28v vs 110 29 aspx从M
  • 使用左连接获得不适当的输出

    我正在尝试获取变体列表 并且对于每个变体都获取所有subvariants list无论子变体属于何处 特别的Test say 100 这是示例数据 Id TestId SourceSubVariantId TargetSubVariantI
  • 如何解析多态 JSON 数组?

    我有一个 JSON 格式的文件 其中包含个人用户的记录 一些用户的记录中间有一个评论字段 我只想解析顶级项目 全名 贡献者姓名 电子邮件 使用 Newtonsoft JSON 解析器 但我似乎无法让它识别单个对象 当我将整个字符串解析为一个
  • 将旧的 Unity 代码升级到 Unity 5

    在触发按钮上播放动画的代码似乎不起作用 我在 Youtube 上看到了一个视频 内容很简单animation Play 它可以在该视频上运行 但我无法让它在我的计算机上运行 我做错了什么还是团结改变了它 请帮助我在网上找不到解决方案 所有
  • ef core 在更新数据库期间不使用 ASPNETCORE_ENVIRONMENT

    我使用 Visual Studio 通过一定的迁移来更新我的所有环境 使用下面的命令效果很好 update database Migration initMigrationProduct c ProductContext Environme
  • 当一对迭代器初始化时,向量是否知道先保留?

    考虑以下代码 struct MyData MyData const BYTE pData size t uSize bucket pData pData uSize std vector
  • 如何在 stl 模板中使用导出类 (__declspec(dllexport))?

    我正在使用导出的类 class declspec dllexport myclass private template declspec dllexport class std map
  • 为什么我无法通过 lambda 捕获“this”指针?

    考虑以下代码 class A public void foo auto functor this A a this auto functor a The compiler won t accept this instead of a a g
  • 如何从 C# 中的 Web Api 方法正确获取字节数组?

    我有以下控制器方法 HttpPost Route SomeRoute public byte MyMethod FromBody string ID byte mybytearray db getmybytearray ID working

随机推荐

  • 有条件地解析 Unity 中的命名实现

    Unity 允许您命名同一接口的不同实现 然后按名称解析它们 var container new UnityContainer register container Register
  • “overflow-y:scroll”属性是否有助于防止 Opera/Safari 中的水平移动?

    我在 CSS 中使用以下内容来强制 Firefox 中的垂直滚动条 body overflow y scroll 这个技术在 Safari 和 Opera 中有效吗 有人说是 有人说不然 CSS 规则overflow y scroll为我工
  • c中如何使用fgets()通过用户输入来控制while循环的执行?

    我正在尝试用 c 编写一个程序 其中我可以通过来自标准输入的用户输入来控制 while 循环的执行 我已经通过 scanf 和 getchar 函数成功完成了它 现在我尝试使用广泛推荐使用的 fgets 函数而不是 scanf 函数来复制此
  • ModuleNotFoundError:没有名为“word2number”的模块错误

    使用命令安装 word2number 时 from word2number import w2n 我在使用 Google Colab 时收到此错误 ModuleNotFoundError 没有名为 word2number 的模块错误 我可以
  • 将 Azure SDK 从 2.4 升级到 2.6 后生成错误

    我刚刚使用项目属性 gt 应用程序下的升级功能将我的 Web 角色项目 和解决方案 从 Azure SDK 2 4 升级到 Azure SDK 2 6 当我构建应用程序时 一切正常 但是当我尝试运行它 并启动 Azure 模拟器等 时 如果
  • 带有 envmap 的 Aframe gltf-model 演示

    在aframe中加载GLTF 模型非常方便 但没有发现包含envmap纹理的案例 我希望官方能提供与三位官方相同的案例 pmremGenerator fromEquirectangular texture 函数用于使gltf模型产生真实的反
  • Amazon S3 - 使用 Java API 批量文件上传?

    我们希望开始使用 S3 来满足我们的一些存储需求 并且我正在寻找一种方法来执行 N 个文件的批量上传 我已经使用 Java API 编写了代码来执行单个文件上传 但是有没有办法提供要传递到 S3 存储桶的文件列表 我确实看过以下问题是否可以
  • 如何防止 css 转换为内联 css

    我正在使用 jquery 在按下按钮时修改 div 元素的 css 我注意到 css 内联到 HTML 中 如何防止样式内联 这些样式标签出现在渲染时 链接您的stylesheet in head
  • Eclipse 对于 g++ 不返回的代码返回错误

    构建简单的代码 示例如下 在 eclipse 上返回错误 而命令行中的 g 不会返回错误 eclipse 和 g 都输出可执行文件 其行为相同 并且结果符合我的期望 当代码不像我所展示的示例那样简单时 这会很痛苦 任何想法表示赞赏 环境 E
  • 如何拆分专有名称?

    我有一份来自 AD 的人员及其 DN 列表 我无法直接访问该 AD 他们的 DN 格式为 DNList CN Bob Dylan OU Users OU Dept OU Agency OU NorthState DC myworld DC
  • 检查列表中是否存在值为 x 的namedtuple

    我想查看列表中是否存在命名元组 类似于 numbers 1 2 3 4 5 if 1 in numbers do stuff 有没有Pythonic 或没有 的方法来做到这一点 就像是 namedtuples namedtuple 1 na
  • NSURL 中的 CGImage 有效,但 UIImage 中无效

    我在对图像应用滤镜时遇到一些问题 使用 CIImage imageWithContentsOfURL 时 以下代码完美运行 NSInteger filterIndex UITapGestureRecognizer sender view t
  • 更改画布中像素的颜色、Tkinter、Python

    有人知道是否可以在不使用 un 对象的情况下更改画布中像素的颜色 因此无需使用类似的东西canvas create oval or canvas create rectangle 除了创建某种 1x1 像素对象之外 没有其他方法可以为像素着
  • 错误:在初始化尝试调用方法“值”之前无法调用滑块上的方法

    我写了类似下面的东西 id为 PLUS I的div的onclick 我收到以下错误 cannot call methods on slider prior to initialization attempted to call method
  • 使用 mpi4py 接收多个发送命令

    如何修改以下代码 改编自http materials jeremybejarano com MPIwithPython pointToPoint html http materials jeremybejarano com MPIwithP
  • matlab中传递和保存匿名函数

    我想要一个函数 例如 一个 fit 函数 返回一个匿名函数 通常存储在struct 我可以保存并稍后使用 然而 路过 func倾向于传递函数指针而不是函数本身 是一个inline函数是做到这一点的唯一方法吗 我想避免inline因为它非常慢
  • Django 选择字段

    我正在尝试解决以下问题 我的网页只能看到版主 此页面显示的字段 用户注册后 用户名 名字 姓氏 电子邮件 状态 相关性等 我需要显示带有此字段的数据库中存储的所有用户信息的表 但其中两个字段有选择 所以我想做出一个选项 版主可以选择另一个选
  • 简单地将 OpenMp Parallel for 转换为 c# Parallel for

    你好 我正在将这个 c openmp 并行转换为 c 并行 但它说 错误 1 并非所有代码路径都返回 lambda 表达式类型的值 System Func
  • 测试pdo的php代码可用吗?

    我想用PDO http php net manual en book pdo php但我不确定我的主机是否已正确设置 我如何在 PHP 中测试它是否已设置并适用于 MySQL php 5 1 始终安装 PDO 您可以使用 phpinfo 检
  • 扩展方法需要将类声明为静态

    为什么扩展方法要求声明类是静态的 这是编译器的要求吗 它在 C 4 规范的语言规范第 10 6 9 节中规定 当方法的第一个参数 包括 this 修饰符 即 方法被认为是一个扩展 方法 扩展方法只能是 以非泛型 非嵌套方式声明 静态类 第一