c# - 如何向文字对象添加方法和字段?

标签 c# .net oop literals

在面向对象编程中,一切都应该是一个对象。从这个 postula 开始,是否可以向文字对象添加方法和字段,例如数字、字符串、 bool 值或字符?

我注意到在 C# 中,我们可以从数学表达式中使用“Integer”类的一些方法和字段:

var a = (2 + 2).ToString();

我认为访问“Integer”类和与数学表达式(和/或其值)实际相关的方法是更多的语法糖。

但是在C#中是否可以单独将方法和字段之一定义为文字对象?比如这些例子:

"Hello, world!".print();
var foo = 9.increment();

这可能没什么用,但是语言是面向对象的,这应该是可行的。如果这在 C# 中是不可能的,我们如何使用面向对象的范例来做到这一点?

最佳答案

当然,您可以实现一个扩展方法并拥有所需的语法(但是,Int32不会 被更改):

  public static class IntExtensions {
    public static int increment(this int value) {
      return value + 1; 
    }
  }

 ...

 // Syntax sugar: the actual call is "int foo = IntExtensions.increment(9);"
 var foo = 9.increment();

在当前的 C# 版本 (7.2) 中,我们无法添加扩展属性扩展事件等。这些选项可以出现在 C# 8.0(扩展一切,https://msdn.microsoft.com/en-us/magazine/mt829270.aspx):

关于c# - 如何向文字对象添加方法和字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52413400/

相关文章:

java - 作业概览 说明

c# - 如何检查事件处理程序是否已注册

c# - 无故使用 'var' 关键字是否有害?

c# - 使用运行时类型(在 C# 中)进行逻辑流

python - 使用 Python 装饰器为方法添加方法

.net - 如何解析 DateTime 并将其转换为 RFC 822 日期时间格式?

c# - 加载任何表单时运行事件

c# - 如何获取像 ReadOnlySpan 这样的 ref 结构的 sizeof?

javascript - 值未进入文本框

c# - Web API 模型验证和默认值