c# - 为什么 C# 编译器在字段初始化期间无法绑定实例委托?
问题描述
查看众所周知的CS0236 错误消息
错误 (CS0236):字段初始值设定项无法引用非静态字段、方法或属性,并且
这种限制的原因是初始化顺序:
您不能使用实例变量来初始化另一个实例变量。
但this
不是实例变量,是吗?我的问题是为什么即使对引用类方法也有如此严格的要求?据我了解,仅限制类方法的调用就足够了,例如:
bool _field;
bool GetField() => _field;
bool _field2 => GetField(); // clearly an error, invoking something that might not be initialized
// why compiler cannot safely bind a delegate? It does not have to access anything, just take an address
Func<bool> Func1 = GetField; // does not have to error, refencing but not invoking
这只是一个设计决定,还是有任何技术限制阻止在字段初始化期间进行委托绑定?
编辑:我对技术方面感兴趣,而不是修复错误。是什么阻止了编译器绑定实例方法?的地址this
必须在绑定发生时可用,并且类似的东西funcPtr = instanceaddress+memberoffset
似乎对初始化没有任何副作用。
解决方案
推荐阅读
- python - 为 seaborn 图重新排列两个或多个 pandas 数据帧
- gnuplot - 在gnuplot中,如何在文件中搜索字符串并使用字符串后面的值?
- android - ImageView 缩放和设置另一个图像问题
- regex - 如何限制正则表达式之前和之后的内容
- ios - 数组中的对象未被修改
- css - 垂直对齐不同大小的文本
- authentication - 使用 OAuth 的 POP3 身份验证给出“Err 协议错误。连接已关闭”
- typescript - 在新对象实例上执行的 Typescript 类方法
- xamarin.ios - 如何在 Xamarin.iOS 中使用 ViewModel
- python-3.x - ModuleNotFoundError:没有名为“comet_ml”的模块