在观看networking研讨会之后, Jon Skeet检查了ReSharper ,我已经开始用recursion构造函数调用一下,发现下面的代码是有效的C#代码(通过有效的我的意思是编译)。 class Foo { int a = null; int b = AppDomain.CurrentDomain; int c = "string to int"; int d = NonExistingMethod(); int e = Invalid<Method>Name<<Indeeed(); Foo() :this(0) { } Foo(int v) :this() { } } 大家都知道,编译器会将字段初始化移入构造函数中。 所以如果你有像int a = 42;这样的字段int a = 42; , 所有构造函数中都有a = 42 。 但是,如果你有构造函数调用另一个构造函数,你将只有被调用的初始化代码。 例如,如果你有构造函数的参数调用默认的构造函数,你将只有在默认的构造函数中赋值a = […]
我知道在哪里可以findC#5语言规范,但我无法在任何地方findC#6语言规范。 C#6语言规范在哪里?
我希望能做这样的事情,但在C#中似乎是非法的: public Collection MethodThatFetchesSomething<T>() where T : SomeBaseClass { return T.StaticMethodOnSomeBaseClassThatReturnsCollection(); } 我得到一个编译时错误:“'T'是'types参数',在给定的上下文无效。 给定一个genericstypes参数,如何在generics类上调用静态方法? 给定约束,静态方法必须可用。
有没有一种方法来反序列化C#中的expression式,我想将expression式存储在数据库中,并在运行时加载它们。
有谁知道如何 , 何时或如何让Memcached运行在Windows 64位环境? 我正在build立一个新的托pipe解决scheme,而且更愿意运行一个64位的操作系统,而且由于它是一个使用SQL Server数据库的ASP.Net MVC解决scheme,所以操作系统要么是Windows Server 2003,要么是(跳跃!)2008。 我知道这可能会引起关于服务器上的32位和64位的争论,但我们只是说,我的偏好是64位,我有一些很好的理由。 到目前为止,我已经尝试了一些选项,并find了一些有关在32位机器上启动的帮助 (并且我可能会添加成功),但是由于原来的Windows端口是特定于Win32的,所以这很难在x64上作为服务安装时。 它也依赖于libevent ,我只能得到一个Win32编译版本。 我怀疑,简单地加载所有这些在C + +和“编译”(对于64位)将无法正常工作,尤其是32位和64位体系结构的错综复杂的差异,但我想知道是否有人正在努力得到这个地面? 不幸的是,我的专业知识只在托pipe代码(C#),否则我会尝试自己做这件事,但我不能相信我是唯一一个试图让memcached在64位Windows服务器上运行的人。 ..am我?? 任何帮助或build议表示赞赏… 更新 是的,恐怕我仍然在寻找一个答案 – 我所有的努力(用我可怜的C ++技能),使一个稳定的构build失败 – 我已经抛弃了一台服务器和3个虚拟机只是试试,所以现在我转向真正的专家。 有人计划将其移植到64位? 或者你真的build议我使用MS Velocity代替? 我想起了这个想法 更新:@Lars – 我实际上使用Enyim – 这是非常好的,但是你指的是客户端,而不是服务器部分。 @DannySmurf – 我只能在32位操作系统上将其作为服务安装。 64位操作系统拒绝安装此Win32服务。 当然是的,很多Win32代码可以在x64架构上无缝运行,因此你可以运行32位应用程序(比如Office),或者在Vista / XP 64等上运行游戏,但是这不会直接影响到服务。 我不是专家,我怀疑它与服务需要订阅的同步或事件有关,我怀疑64和32不会很好地发挥作用。 我很高兴能够纠正这一切,但要回答你的问题 – 是的,我试过了。 @OJ – 非常感谢你的直接回应。 我想了很多,但不知道有没有人有build议或已经走下了这条路。 也许当StackOverflow是LIVE,那么更多的人会回应,让我知道这是否是被研究的东西,虽然我可以尝试自己编译它 – 我根本不能“信任”(用我的C […]
比方说,我有一个types,我想使其默认构造函数私有。 我写了以下内容: class C { C() = default; }; int main() { C c; // error: C::C() is private within this context (g++) // error: calling a private constructor of class 'C' (clang++) // error C2248: 'C::C' cannot access private member declared in class 'C' (MSVC) auto c2 = C(); // error: as above } […]
让我们考虑一下这个非常简单的asynchronous方法: static async Task myMethodAsync() { await Task.Delay(500); } 当我编译VS2013(Roslyn编译器之前)这个生成的状态机是一个结构。 private struct <myMethodAsync>d__0 : IAsyncStateMachine { … void IAsyncStateMachine.MoveNext() { … } } 当我用VS2015(Roslyn)编译它时,生成的代码是这样的: private sealed class <myMethodAsync>d__1 : IAsyncStateMachine { … void IAsyncStateMachine.MoveNext() { … } } 正如你可以看到Roslyn生成一个类(而不是一个结构)。 如果我没有记错,旧的编译器(CTP2012,我猜)中的asynchronous/等待支持的第一个实现也生成了类,然后从性能原因改为结构。 (在某些情况下,你可以完全避免拳击和堆分配…)(看到这个 ) 有谁知道为什么这是在罗斯林再次改变? (我对此没有任何问题,我知道这个改变是透明的,不会改变任何代码的行为,我只是好奇而已) 编辑: 来自@Damien_The_Unbeliever(和源代码:))的答案imho解释了一切。 Roslyn描述的行为只适用于debugging版本(因为评论中提到的CLR限制,这是需要的)。 在释放它也生成一个结构(具有所有的好处..)。 所以这似乎是一个非常聪明的解决scheme来支持编辑和继续,并在生产中获得更好的性能。 有趣的东西,谢谢大家谁参与!
这个const的目的是什么? const Object myFunc(){ return myObject; } 我刚刚开始阅读有效的C + +和项目3提倡这一点,谷歌search拿起类似的build议,但也反例。 我不明白如何在这里使用const将是可取的。 假设按价值回报是可取的,我不认为有任何理由来保护返回的价值。 给出的例子为什么这可能是有益的是防止意想不到的布尔转换的返回值。 那么实际的问题是,应该用explicit关键字来防止隐式bool转换。 在这里使用const可以防止在不分配的情况下使用临 所以我不能用这些对象来执行算术expression式。 似乎没有一个无名的const有用的情况。 在这里使用const获得了什么,什么时候会更好? 编辑:将算术示例更改为任何修改您可能要在分配之前执行的对象的任何函数。 (这是我的第一篇文章,哇,我不能相信有多快,人们把代码示例和坑坑洼洼的链接,好的答案,谢谢!)
微软刚刚宣布,计算date(超过闰年)的软件错误导致Windows Azure上周出现重大中断 。 在闰年的DateTime.Now.AddYears(1)周围的判断是否真的是一个简单的错误? 什么编码实践可以阻止这个? 编辑由于dcstraw指出闰年DateTime.Now.AddYears(1)事实上在.NET中返回正确的date。 所以这不是一个框架错误,但显然是date计算中的一个错误。
这是我的代码: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> int main (void) { struct addrinfo hints; memset (&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; hints.ai_flags = AI_CANONNAME; struct addrinfo *res; getaddrinfo ("example.com", "http", &hints, &res); printf ("Host: %s\n", "example.com"); void *ptr; while (res != NULL) { […]