小编Har*_*rya的帖子

为什么vptr不是静态的?

包含一个或多个虚函数的每个类都有一个与之关联的Vtable.一个名为vptr的void指针指向该vtable.该类的每个对象都包含指向同一Vtable的vptr.那为什么vptr不是静态的呢?而不是将vptr与对象相关联,为什么不将它与类关联?

在此输入图像描述

c++ virtual function vtable vptr

13
推荐指数
2
解决办法
2682
查看次数

静态构造函数不在静态字段之前调用

我有一堂课如下:

static class Configuration
    {
        private static AppSettingsSection _appSettingsLogsSection;
        static Configuration()
        {
            var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            _appSettingsLogsSection = config.GetSectionGroup("Logs").Sections["appSettings"] as AppSettingsSection;
        }

        public static int LogSendIntervalMinutes = Convert.ToInt32(_appSettingsLogsSection.Settings["LogSendIntervalMinutes"]);

    }
Run Code Online (Sandbox Code Playgroud)

现在,根据我的理解,应该在第一次引用任何静态成员之前调用静态构造函数。但令人惊讶的是,它的行为却并非如此。当我从 Main 类引用LogSendIntervalMinutes时,调用直接转到静态字段,而不是触发静态构造函数,从而导致 NullReferenceException。

我在这里做错了什么吗?我的理解是否正确?

.net c# clr static

4
推荐指数
1
解决办法
2463
查看次数

内部课程应该进行单元测试吗?

我们正在开发一种新的API.我的同事和我对内部课程是否应该进行单元测试有不同的看法.

我的同事给出的不是单元测试内部课程的要点

  1. 单元测试应仅针对公共类/方法编写
  2. 您应该能够通过公共API本身覆盖您的完整代码,包括内部类.如果您的内部类没有通过公共接口进行测试,这意味着有一些丢失的测试用例,或者您找到了不需要的死代码.
  3. 为内部类编写单元测试可能会导致冗余测试,或者可能强制编写从不需要的代码.

我给出的分数有利于单元测试内部课程

  1. 通过单元测试覆盖完整代码只有公共类可能是困难/不切实际的.为内部类编写单元测试确保它们至少在自己的世界中正确运行,并且我们可以进行集成测试以测试整个应用程序的正确性.
  2. 即使有一些冗余的单元测试,也比在顶层缺少测试用例更好.
  3. 内部课程是公共的,所以我们应该独立测试它们.如果只有一个公共类和100个内部类,则很难通过公共接口覆盖所有场景.

我尝试在线搜索,但似乎没有关于此的最佳实践或标准意见.你认为一个好的方法是什么?

对java人员的注意: " internal "是C#中的一个关键字,它限制了类对程序集的可见性.在程序包/程序集之外无法访问该类.它不等同于私人阶级.

c# tdd unit-testing

4
推荐指数
1
解决办法
1028
查看次数

Task.ContinueWith回调线程

我试图为此找到答案,但是没有找到。我想知道的是在哪个线程Task.ContinueWith委托上被调用。等待,我知道它会尝试在捕获的SynchronizationContext文件上运行它,但是没有任何文档记录ContinueWith

我还尝试了一个示例程序,尽管它似乎是在Threadpool线程上调用的,但我怀疑在某些情况下它可能会调用SynchronizationContext。也许有人可以提供明确的答案。

.net c# multithreading task task-parallel-library

3
推荐指数
1
解决办法
832
查看次数

C#.Net关闭超出内存使用情况的应用程序

我有一个处理大量内存数据的应用程序.现在,有时会发生内存限制为2GB/app并且我的程序挂起.任务管理器中的内存使用量变得混乱(连续波动从2GB到6GB)我想要的是当内存使用量达到特定限制时,程序应该优雅地退出.我不想手动干预用户查杀应用程序.这可能吗?

.net c#

1
推荐指数
1
解决办法
985
查看次数