Tag: C#的

为什么不把所有的function都用C ++虚拟化?

我知道虚拟函数有一个解引用的开销来调用一个方法。 但我认为现代build筑的速度几乎可以忽略不计。 C ++中的所有函数都不像Java一样是虚拟的吗? 据我所知,在基类中定义一个虚函数是充分/必要的。 现在当我写一个父类时,我可能不知道哪个方法会被覆盖。 那么这是否意味着在编写子类时,有人将不得不编辑父类。 这听起来不方便,有时不可能? 更新: 总结从Jon Skeet的答案如下: 在明确地让某人意识到他们正在inheritancefunction(这对他们自己有潜在的风险[(Jon的回答检查)] [和潜在的小的性能收益]之间进行权衡时,需要权衡灵活性,代码更改和更陡峭的学习曲线。 来自不同答案的其他原因: 虚拟函数不能被插入,因为内联必须在运行时发生。 当您希望函数从内联中获益时,这会对性能产生影响。 可能还有其他原因,我很想知道并总结它们。

C#构造函数重载

我如何在C#中使用构造函数,如下所示: public Point2D(double x, double y) { // … Contracts … X = x; Y = y; } public Point2D(Point2D point) { if (point == null) ArgumentNullException("point"); Contract.EndContractsBlock(); this(point.X, point.Y); } 我需要它不复制另一个构造函数的代码…

在C#中退出foreach循环

foreach (var name in parent.names) { if name.lastname == null) { Violated = true; this.message = "lastname reqd"; } if (!Violated) { Violated = !(name.firstname == null) ? false : true; if (ruleViolated) this.message = "firstname reqd"; } } 每当违反是真的,我想立即摆脱foreach循环。 我该怎么做?

两个整数的XOR是否超出范围?

我一直在研究在数组中寻找孤独整数的algorithm,这里是实现: int arr[] = {10, 20, 30, 5, 20, 10, 30}; int LonelyInteger = 0; for(int i=0; i< 7; i++) { LonelyInteger = LonelyInteger ^ arr[i]; } 结果是5 。 我的问题是 – 据说由于这个操作,整数(由XOR操作产生) 太大了 : LonelyInteger ^ arr[i] 这导致一个潜在的大整数不能由数据types表示在这种情况下说int 。 我的问题是: XOR甚至有可能产生一个不能存储在inttypes中的大整数值? 如果这不可能发生,那么是否有证据呢?

什么是你最喜欢的C ++编码风格成语

你最喜欢的C ++编码风格成语是什么? 我正在问风格或编码排版,比如放大括号的地方,关键字后面是否有空格,缩进的大小等。这与最佳做法或要求相反,例如总是使用delete[]删除数组。 下面是我最喜欢的一个例子:在C ++类初始化程序中,我们把分隔符放在行的前面,而不是后面。 这使得保持最新更容易。 这也意味着版本之间的源代码控制差异更为清晰。 TextFileProcessor:: TextFileProcessor( class ConstStringFinder& theConstStringFinder ) : TextFileProcessor_Base( theConstStringFinder ) , m_ThreadHandle ( NULL ) , m_startNLSearch ( 0 ) , m_endNLSearch ( 0 ) , m_LineEndGetIdx ( 0 ) , m_LineEndPutIdx ( 0 ) , m_LineEnds ( new const void*[ sc_LineEndSize ] ) { ; }

Boost认为有害?

很多C ++问题的答案都包含了这个答案: “你应该使用boost::(插入你最喜欢的智能指针在这里),或者甚至更好的提振::(插入你最喜欢的兆复杂的提升types在这里)” 我完全不相信这对提问者来说有什么好处,总的来说,他们是明显的C ++新手。 我的理由如下: 使用智能指针而不理解底层的情况会导致一代C ++程序员缺乏程序员的一些基本技能。 这些似乎已经发生在Java领域了。 决定使用哪种types的智能指针非常依赖于正在解决的问题域。 这几乎总是从这里发布的问题中丢失,所以简单地说“使用共享指针”可能是最没有帮助,可能是完全错误的。 Boost尚未成为C ++标准的一部分,可能无法在提问者使用的特定平台上使用。 安装它有点痛苦(我刚刚使用了Jam ),如果你想要的只是一些聪明的指针,那就太过分了。 如果您正在编写FOSS代码,那么您不希望代码严重依赖于外部库,而您的用户可能再也没有这些库。 由于拜占庭式的库之间的依赖关系的复杂性,我已经在很多场合使用了FOSS代码。 总而言之,我并不是说不推荐Boost,但是这样做时我们应该更加小心。

使用SignalR和ElastiCache失败

我们有使用SignalR和Amazon's ElastiCache作为背板的C#应用​​程序。 然而,即使SignalR允许屏蔽掉某些命令,它仍然会发送一个CONFIG给ElastiCache ,从而使ElastiCache SignalR提示( SignalR不支持CONFIG )。 现在我们编译我们自己的SignalR二进制文件, SignalR删除自动重新configuration例程。 我想知道是否有人绊倒了这个问题,并想看看你是如何解决这个问题的。 最好的办法是编写ElastiCache的代理(如Twitter代理),但这是一个巨大的任务。 提前致谢。

是否可以在不使用SDK的情况下调用Dynamics CRM 2011的后期绑定WCF组织服务 – 直接定制绑定?

我试图实现一个纯粹的WCF场景,我想调用Dynamics CRM WCF服务,而不依赖于SDK辅助类。 基本上,我想通过.net框架仅使用本机WCF支持,针对Dynamics CRM 2011实施联合身份validation。 我这样做的原因是我想稍后移植到BizTalk。 我已经使用SvcUtil成功生成了代理类,但策略和安全声明的一部分与configuration模式不兼容。 SvcUtilbuild议用代码来build立绑定,这就是我正在做的。 结果代码在这里: private static void CallWcf() { OrganizationServiceClient client = null; try { // Login Live.com Issuer Binding var wsHttpBinding = new WSHttpBinding(); wsHttpBinding.Security = new WSHttpSecurity(); wsHttpBinding.Security.Mode = SecurityMode.Transport; // Endpoint Binding Elements var securityElement = new TransportSecurityBindingElement(); securityElement.DefaultAlgorithmSuite = SecurityAlgorithmSuite.TripleDes; securityElement.IncludeTimestamp = true; securityElement.KeyEntropyMode = […]

如何使用双层架构将UseEmbeddedHttpServer设置为true时,使我的RavenDB应用程序正确执行?

我在我的应用程序中使用RavenDB-Embedded 2.0.2230与不同程序集中的ASP .Net Web API交互。 当我在文档存储上设置UseEmbeddedHttpServer = true时,第一次向RavenDB发送请求时,它正确执行,但是当我第二次尝试时,我的应用程序显示Raven Studio。 当我删除UseEmbeddedServer设置时,我的应用程序运行没有任何问题。 我的RavenDB在数据层中configuration了以下代码: this.documentStore = new EmbeddableDocumentStore { ConnectionStringName = "RavenDB", UseEmbeddedHttpServer = true }.Initialize(); 并且Web.config实现在服务层中具有这些设置: <connectionStrings> <add name="RavenDB" connectionString="DataDir=~\App_Data\RavenDatabase" /> </connectionStrings> 有没有我错过的设置? 有什么设置,我需要申请点Raven Studio到不同的端口?

将纹理(绘制为平面3D对象)转换为模拟深度时,黑线会随机出现

我们正在使用XNA开发一个自顶向下的RPG游戏。 最近我们在编写代码来显示我们的地图时遇到了挫折。 在绘制地图时,用正常的变换matrix进行自顶向下的视图,一切似乎都很好。 当使用非平坦变换matrix(如顶部或底部挤压模拟深度)时,会出现相机更改位置时移动的黑色线(顶部或底部的行,左侧或右侧的列被挤压)。 移动和放置似乎是随机的。 (图片进一步向下。) 背景信息 地图由瓷砖组成。 原始纹理包含32×32像素的图块。 我们通过创build2个三angular形并在这些三angular形上显示原始纹理的一部分来绘制图块。 着色器为我们做这个。 有三层三angular形。 首先,我们绘制所有半透明和部分透明的瓷砖的所有不透明的瓷砖和所有不透明的像素,然后绘制所有半透明和部分透明的瓷砖和像素。 这工作正常(但是,当我们缩放浮点因子,有时颜色混合线位于瓷砖行和/或列之间)。 绘制状态 我们对所有拼贴使用相同的rasterizerState,并且在绘制纯色或半透明拼贴时我们在两个之间切换。 _rasterizerState = new RasterizerState(); _rasterizerState.CullMode = CullMode.CullCounterClockwiseFace; _solidDepthState = new DepthStencilState(); _solidDepthState.DepthBufferEnable = true; _solidDepthState.DepthBufferWriteEnable = true; _alphaDepthState = new DepthStencilState(); _alphaDepthState.DepthBufferEnable = true; _alphaDepthState.DepthBufferWriteEnable = false; 在阴影中,我们设置SpriteBlendMode如下: 第一固体层1使用 AlphaBlendEnable = False; SrcBlend = One; DestBlend = Zero; 所有其他固体和透明层(稍后绘制)使用 […]