gpt4 book ai didi

c# - 在 int 上使用扩展方法

转载 作者:可可西里 更新时间:2023-11-01 03:12:55 24 4
gpt4 key购买 nike

我正在阅读有关扩展方法的内容,并与他们一起闲逛看看它们是如何工作的,我尝试了这个:

namespace clunk {
public static class oog {
public static int doubleMe(this int x) {
return 2 * x;
}
}

class Program {
static void Main() {
Console.WriteLine(5.doubleMe());
}
}
}

它按预期工作,使用 doubleMe 方法成功扩展 int,打印 10。

接下来,作为一个 C 老手,我想知道我是否可以这样做:

namespace clunk {
public static class BoolLikeC {
public static bool operator true(this int i) { return i != 0; }
public static bool operator false(this int i) { return i == 0; }
}

class Program {
static void Main() {
if ( 7 ) {
Console.WriteLine("7 is so true");
}
}
}
}

我想如果前者行得通,那么后者也应该行得通在 bool 上下文中使用的 int 将调用 int 上的扩展方法,检查以查看7 不等于 0,返回真。但是相反,编译器甚至不喜欢稍后的代码,并将红色的波浪线放在两个 this 的下面,并说“Type expected”。为什么这行不通?

最佳答案

非常聪明!一个很好的尝试,但遗憾的是我们没有实现“扩展一切”,只是扩展方法。

我们考虑过实现扩展属性、扩展运算符、扩展事件、扩展构造函数、扩展接口(interface),应有尽有,但其中大多数都不够引人注目,无法将其纳入 C# 4 或即将推出的 C# 版本。我们已经为您提到的那种事情设计了语法。我们在扩展属性方面走得更远;我们几乎将扩展属性添加到 C# 4 中,但最终没有成功。悲伤的故事就在这里。

http://blogs.msdn.com/b/ericlippert/archive/2009/10/05/why-no-extension-properties.aspx

所以,长话短说,没有这样的功能,但我们会在该语言的假设 future 版本中考虑它。

如果您真的喜欢 非零表示的复古 C 约定,您当然可以在 int 上创建一个“ToBool()”扩展方法-真

关于c# - 在 int 上使用扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6656974/

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