Tag: internals

c#如何计算对象的哈希码?

这个问题来自关于元组的讨论。 我开始考虑元组应该具有的哈希码。 如果我们接受KeyValuePair类作为元组怎么办? 它不会覆盖GetHashCode()方法,所以可能它不会知道它的“子”的哈希码…所以,运行时将调用Object.GetHashCode(),它不知道真实的对象结构。 然后我们可以创建一些引用类型的实例,它们实际上是Equal,因为重载的GetHashCode()和Equals()。 并将它们用作元组中的“孩子”来“欺骗”字典。 但它不起作用! 运行时以某种方式计算出我们元组的结构并调用我们类的重载GetHashCode! 它是如何工作的? Object.GetHashCode()的分析是什么? 当我们使用一些复杂的密钥时,它会在某些不好的情况下影响性能吗? (可能,不可能的情况……但仍然) 以此代码为例: namespace csharp_tricks { class Program { class MyClass { int keyValue; int someInfo; public MyClass(int key, int info) { keyValue = key; someInfo = info; } public override bool Equals(object obj) { MyClass other = obj as MyClass; if (other == null) […]

.Net CLR如何在内部实现“接口”?

只是好奇.NET CLR如何在内部处理接口? Q1]当CLR遇到类似的情况时会发生什么: 简单的界面示例。 (以下同样使用。) interface ISampleInterface { void SampleMethod(); } class ImplementationClass : ISampleInterface { // Explicit interface member implementation: public void SampleMethod() { // Method implementation. } static void Main() { //Declare an interface instance. ISampleInterface mySampleIntobj = new ImplementationClass(); // (A) // Call the member. mySampleIntobj.SampleMethod(); // Declare an interface instance. ImplementationClass […]

C#中的静态构造函数/初始化程序的顺序

在使用C#应用程序时,我只是注意到在几个地方静态初始化程序彼此依赖,如下所示: static private List a = new List() { 0 }; static private List b = new List() { a[0] }; 没有做任何有用的特殊工作。 这只是运气吗? C#有解决这个问题的规则吗? 编辑:( re:Panos)在一个文件中,词汇顺序似乎是王道? 跨文件怎么样? 在寻找我尝试这样的周期性依赖: static private List a = new List() { b[0] }; static private List b = new List() { a[0] }; 并且该程序没有运行相同(测试套装全面失败,我没有看得更远)。