【问题标题】:Is it possible to overload the “as” or “is” operators是否可以重载“as”或“is”运算符
【发布时间】:2023-04-05 08:49:01
【问题描述】:

这是允许的吗?如果不是,这是否可以通过重载隐式/显式转换运算符来固有地完成?

【问题讨论】:

  • 我不想拿起使用这种功能的代码。用 C/C++ 把这个废话留在它所属的地方。你想解决什么问题?
  • 只是想知道在基本类型和派生类型之间进行转换的可能影响。我想我会问是因为 SO 上的某个人可能知道,而且基于 asis 这两个词的问题对 Google 来说非常困难。

标签: c# casting operator-overloading implicit-conversion explicit-conversion


【解决方案1】:

是否允许重载“is”和“as”运算符?

没有。

如果不是,这可以通过重载隐式/显式转换运算符来固有地完成吗?

没有。 “as”和“is”运算符告诉您事物真正是什么。他们不关注用户定义的转换。

http://blogs.msdn.com/b/ericlippert/archive/2009/10/08/what-s-the-difference-between-as-and-cast-operators.aspx

http://blogs.msdn.com/b/ericlippert/archive/2010/09/16/is-is-as-or-is-as-is.aspx

关于“as”和“is”运算符的更多想法。

【讨论】:

  • 为什么我们不能超载它们呢?这是一个设计决定,还是愚蠢到没有人真正想到这一点?我从来不需要重载is,但我也从来不需要重载'>>'。
  • @SWeko:我们不需要提供实现某个功能的理由。如果没有理由 实施一项功能,或者这些理由不能证明成本合理,那么该功能就不会实施。提议的功能有什么引人注目的好处? (重载移位运算符的好处是您可以定义自己的具有移位运算符的位数组类型。)
  • 我只是在寻找伪经 :) 那个特定的功能会比没用更糟糕,但有没有考虑过?附言如果我想游说某个功能,我会游说扩展属性,而不是 is 重载...
  • @SWeko:我没有理由相信它曾经被考虑过。
【解决方案2】:

没有。检查这个: Overloadable Operators 还有这个All C# operators

【讨论】:

    【解决方案3】:

    不,因为它们本身不是运算符,它们是语言的关键字。

    另外,我不确定您会将它们重载到什么并且仍然保留语言规范的语义?似乎它只能用于大恶:)

    【讨论】:

    • 他们肯定是运营商。它们是二元运算符,一方面接受表达式,另一方面接受类型。
    • 嗨,Eric,是的,我发帖后意识到他们当然是操作员。今天缺咖啡。
    猜你喜欢
    • 2017-05-06
    • 2015-01-01
    • 2012-09-04
    • 2010-10-20
    • 2010-10-21
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多