2024年 6月 22日
奇思妙想
2024年 6月 22日
为什么C#有const和readonly两种常量关键字?
了解C++ const成员的同学知道,const成员只能在类构造函数初始化列表做一次赋值初始化,其它位置都不能改。Java final类型成员的功能类似,对应C# readonly也是同样作用。即如下 …阅读更多
2024年 6月 22日
编程语言”属性”的由来?
这里提到的”属性”是指对类字段封装,而非某些编程语言表征函数特征。在目前较为广泛使用的编程语言来看,ObjC是支持属性最早的语言,不过最早Simula语言已经有提出” …阅读更多
2024年 6月 22日
如何看待编程语言的“副作用”?
编程语言的副作用并不意外着这是不好的行为。副作用意为编程语言表达式或函数会改变其中或外部的变量、参数等任意位置,甚至包含文件、网络状态等。本质上,副作用可能是程序员本来的意图。事实上,应该被避免的是不 …阅读更多
2024年 6月 18日
2024年 6月 18日
C# out和ref修饰的变量有什么区别?
out和ref均代表传递变量引用,即被调用方可以修改,前者要求一定修改,后者不强制要求修改。既然是引用,C#编译器生成的IL代码对于out和ref类型基本无差别,因为都是变量引用(或指针),只是编译器 …阅读更多
2024年 6月 16日
2024年 6月 16日
C#如何处理运算符重载?
以相等==为例,C#默认会对重载相等==的方法转换成有两个类对象为参数的类静态op_Equality的方法(可通过ILDasm工具查看),这意味着你无法再定义一个相同的函数。如果定义,编译器将会报重。
2024年 6月 16日
为什么类静态类型构造器有时不会被调用?
以C#为例,如果代码仅仅是声明一个对象,而非初始化,对于编译器而言,并不会生成任何有效IL代码,连类静态类型构造器都不会被调用。只有在对象有用new初始化才会调用。