你的逻辑是 c++ 的逻辑概念。
c# 的逻辑概念是“本质上来说,函数就应该属于某个对象”,你的理论是 c++ 理论而不是c#理论。编译器来产生相关代码,例如编译出来的汇编语言在调用函数之前首先压入对象引用,在调用函数之后额外弹出对象引用,于是编译器就实现了这个理念。所以c# 编译器比 c++ 编译器高级、优雅。
这是语言设计问题,语言的底层才是汇编实现。
“表达式obj.func,从语法上来看,包含了对象和函数,从语义上来看,这个函数也应该包含对象宿主”,能够保证语法跟语义更语用的统一,而不是说一套做一套地脱节,这才是真正优雅的语言,这就是 c# 比 c++ 好的地方。