Tag: C#的

关键字“new”对C#中的结构做了什么?

在C#中,Structs是按照值来pipe理的,对象是在引用中。 根据我的理解,当创build一个类的实例时,关键字new导致C#使用类信息来创build实例,如下所示: class MyClass { … } MyClass mc = new MyClass(); 对于结构,你不是创build一个对象,而是简单地将一个variables设置为一个值: struct MyStruct { public string name; } MyStruct ms; //MyStruct ms = new MyStruct(); ms.name = "donkey"; 我不明白的是,如果通过MyStruct ms = new MyStruct()声明variables,那么关键字new在这里对语句做了什么? 。 如果struct不能成为一个对象,那么这里实例化的new东西是什么?

WinForms中优雅的日志窗口C#

我正在寻找一个有效的方式来实现一个Windows窗体应用程序的日志窗口的想法。 在过去,我已经使用TextBox和RichTextBox实现了几个,但我仍然不完全满意function。 这个日志旨在为用户提供各种事件的最近历史logging,主要用于数据收集应用程序,其中人们可能会好奇如何完成一个特定的事务。 在这种情况下,日志不需要是永久的,也不需要保存到文件中。 首先,一些提出的要求: 高效快捷; 如果连续快速地将数百行写入日志,则需要耗费最less的资源和时间。 能够提供高达2000行左右的variables回滚。 任何更长的是不必要的。 突出显示和颜色是首选。 字体效果不是必需的。 在达到回滚限制时自动修剪线条。 在添加新数据时自动滚动。 奖励,但不是必需的:在手动交互期间暂停自动滚动,例如用户正在浏览历史logging。 到目前为止,我一直在使用什么来编写和修剪日志: 我使用下面的代码(我从其他线程调用): // rtbLog is a RichTextBox // _MaxLines is an int public void AppendLog(string s, Color c, bool bNewLine) { if (rtbLog.InvokeRequired) { object[] args = { s, c, bNewLine }; rtbLog.Invoke(new AppendLogDel(AppendLog), args); return; } try { rtbLog.SelectionColor = […]

C APIdevise:谁应该分配?

什么是在C API中分配内存的正确/首选的方式? 起初我可以看到两个select: 1)让调用者做所有的(外部)内存处理: myStruct *s = malloc(sizeof(s)); myStruct_init(s); myStruct_foo(s); myStruct_destroy(s); free(s); _init和_destroy函数是必要的,因为可能会在内部分配更多的内存,并且必须在某处处理它。 这有一个更长的缺点,而且malloc可以在某些情况下被消除(例如,它可以通过一个堆栈分配的结构: int bar() { myStruct s; myStruct_init(&s); myStruct_foo(&s); myStruct_destroy(&s); } 另外,调用者必须知道结构的大小。 2)在_init隐藏malloc ,在_destroy free s。 优点:较短的代码,因为function将被称为无论如何。 完全不透明的结构。 缺点:不能通过以不同方式分配的结构体。 myStruct *s = myStruct_init(); myStruct_foo(s); myStruct_destroy(foo); 我现在正在倾向于第一个案件。 那么我又不了解C API的devise。

如何防止iOS崩溃记者崩溃的MonoTouch应用程序?

iOS中有很多iOS崩溃报告库,包括TestFlight和HockeyApp 。 如果你不想依靠服务,你仍然可以使用像PLCrashReporter这样的库 。 绑定这些库是相当微不足道的,因为它们的公共API通常由几个具有几个初始化方法的类组成。 但是,当我们的应用程序尝试使用TestFlight和后来的HockeyApp时,我们的应用程序开始随机崩溃。 原来,这是一个多次 报道的已知问题,但Xamarin并没有提出警告,这是相对模糊的,我们发现它是困难的。 我们已经了解到, 所有的iOS崩溃logging器都会阻止Mono捕获空引用exception: try { object o = null; o.GetHashCode (); } catch { // Catch block isn't called with crash reporting enabled. // Instead, the app will crash. } 为什么会这样呢? 引用Xamarin开发者Rolf的话说, 空引用exception实际上是一个SIGSEGV信号。 通常单声道运行时间处理这个并将其转换为空引用exception,允许执行继续。 问题是SIGSEGV信号在ObjC应用程序中是一件非常糟糕的事情(当它出现在托pipe代码之外时),所以任何崩溃报告解决scheme都会将其报告为崩溃(并且杀死应用程序) – 这发生在MonoTouch获得一个机会之前来处理SIGSEGV,所以MonoTouch没有办法做到这一点。 我确定许多在MonoTouch应用程序中使用TestFlight,而不知道它会导致崩溃。 这是不是很讽刺? 如何使崩溃报告库不会使MonoTouch应用程序崩溃?

使用0x符号的数字是什么意思?

数字上的0x前缀是什么意思? const int shared_segment_size = 0x6400; 它来自于一个在linux上编写的C程序。 我一直没有处理像0x6400这样的整数很长时间,不能记得它的含义,尤其是字母x含义。

你会推荐什么开源的QR码生成器?

我正在寻找一个库在.NET中生成QR码我已经偶然发现了几个付费的,但很less看到任何好的自由的。 任何人都有一个良好的免费开源库的经验? 谢谢

C ++ 11:variables模板函数参数的数量?

我怎样才能得到一个可变参数的模板函数的数量? 即: template<typename… T> void f(const T&… t) { int n = number_of_args(t); … } 在上面实现number_of_args的最好方法是什么?

c大括号内的{* this}

下面的代码编译得很好: g++ -std=c++11 test.cpp -Wall -Wextra -Wfatal-errors && ./a.out 但是,如果我从{*this}删除大括号,并使用*this替代,我将面对错误: 错误:使用已删除的函数'Obj :: Position :: Position(Obj :: Position &&)' {*this}和*this之间有什么区别? class Obj { template<bool> friend class Position; double data; public: class Position { const Obj& ref; public: inline Position(const Obj& ref): ref(ref){} inline Position(Position const &) = delete; inline Position(Position &&) = delete; }; inline Obj(){} […]

如何将我的新用户控件添加到工具箱或新的Winform?

我有一个现有的库(不是一个Winforms应用程序),提供一些WinForms的真正的Windows应用程序。 在这个库中,我想创build一个用户控件将一些控件分组在一起。 要做到这一点,我右键单击,添加,用户控件,并将一些控件拖到新的用户控件。 到现在为止还挺好。 用户控制甚至具有必要的用户控制图标。 但是将新的用户控件从解决scheme资源pipe理器拖到一个新的空白Winform不起作用(我得到一个通过它的一个圆的圆),并拖动到工具箱也无法正常工作(即使我得到一个+符号当我把它拖到工具箱上时)。 是否有某种XML魔术或其他东西我失踪,使这项工作? 注意:我遇到了一些Visual Studio 2008的问题,我通过遵循可以在这里find的解决方法来解决这个问题 。 我现在可以通过简单地重build项目,将我添加到现有项目中的用户控件join到工具箱中。

.NET最佳实践的MongoDB连接?

我一直在使用GitHub上的C#驱动程序来玩MongoDB(它的速度惊人)。 在我testing的小型单线程控制台应用程序中,一切正常。 我能够在8秒内添加100万个文件(是的,百万)运行单线程。 如果我使用for循环范围之外的连接,我只会得到这个性能。 换句话说,我保持每个插入连接而不是连接每个插入。 显然这是人为的。 我以为我会对它进行一番调查,看看它是如何与多个线程一起工作的。 我这样做是因为我需要模拟一个有多个并发请求的网站。 我正在旋转15到50个线程,在所有情况下总共插入了15万个文件。 如果我只是让线程运行,每个插入操作创build一个新的连接,性能就会停下来。 显然,我需要find一种方法来共享,locking或合并连接。 这就是问题所在。 连接到MongoDB的最佳做法是什么? 连接应该在应用程序的整个生命周期内保持打开状态(每个操作的TCP连接都有大量的延迟打开和closures)? 有没有人有任何真实的世界或MongoDB生产经验,特别是底层的连接? 这是我的线程示例使用一个静态连接,被locking插入操作。 请提供build议,以最大限度地提高networking环境中的性能和可靠性! private static Mongo _mongo; private static void RunMongoThreaded() { _mongo = new Mongo(); _mongo.Connect(); var threadFinishEvents = new List<EventWaitHandle>(); for(var i = 0; i < 50; i++) { var threadFinish = new EventWaitHandle(false, EventResetMode.ManualReset); threadFinishEvents.Add(threadFinish); var thread = […]