如何在运行时更改对象的行为?(使用C++)
我将举一个简单的例子.我有一个Operator包含方法的类operate.我们假设它看起来像这样:
double operate(double a, double b){
return 0.0;
}
Run Code Online (Sandbox Code Playgroud)
用户将给予一定的输入值a和b,而会选择执行什么操作让我们说,他可以选择计算加法或乘法.鉴于它的输入,我被允许做的只是实例化Operator和调用operate(a, b),这正是我之前提到的.
计算乘法或加法的方法将在某处实现(不知道在哪里).
总之,我必须根据用户的输入更改Operator对象的行为.
在C#中有一些预定义的委托
我知道这些:
EventHandler // Default event callbacks
EventHandler<T> // Default event callbacks with custom parameter (inheriting from EventArgs)
Action // Function without return value and without parameter
Action<T1, T2, T3, T4> // Function without return value and 1-4 parameters
Func<T1, T2, T3, T4, TResult> // Methos with 0-4 parameters and one result type
Predicate<T> // equivalent to Func<T, bool>
Run Code Online (Sandbox Code Playgroud)
对于特殊情况和框架的生成表单部分还有更多,但这些通常很适合在自编代码中使用.
如果你知道一些更有用的添加它们.否则就回答了.
据我所知,这两个javascript的行为方式相同:
选项A:
function myTimeoutFunction()
{
doStuff();
setTimeout(myTimeoutFunction, 1000);
}
myTimeoutFunction();
Run Code Online (Sandbox Code Playgroud)
选项B:
function myTimeoutFunction()
{
doStuff();
}
myTimeoutFunction();
setInterval(myTimeoutFunction, 1000);
Run Code Online (Sandbox Code Playgroud)
使用setTimeout和setInterval有什么区别吗?
我有一个包
public abstract class Player { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
还有这些
public abstract class GamePlayer extends Player { /*...*/ }
public abstract class TournamentPlayer extends Player { /*...*/ }
public abstract class StatelessPlayer extends Player { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
该软件包的用户需要玩家,但为了在不破坏它的情况下使用该软件包,我要求他们永远不要直接扩展播放器.相反,他们应该扩展提供的子类之一.
问题:我应该如何阻止用户直接扩展播放器?
我正在寻找一种能明显禁止这种禁令的方法.
好的,我有一个我正在测试的ClickOnce应用程序,我在第一次使用加载应用程序时向用户询问了几条信息; 客户ID和名称.然后我设置属性,以便它们可以跨会话保存.属性为Properties.Settings.Default ["Customer ID"],名称类似.
所以我通过控制面板卸载应用程序并重新安装应用程序,但设置仍然存在!我去找我的应用程序的所有目录并删除设置,但应用程序就像它仍然有它们.我甚至可以通过调试器看到它们仍在那里.
我如何摆脱它们?这非常令人沮丧,因为它几乎不可能测试新数据并调试任何首次安装.
谢谢...
我有一个声明
String pass = com.liferay.portal.util.PortalUtil.getUserPassword(renderRequest);
Run Code Online (Sandbox Code Playgroud)
这导致eclipse IDE中出现以下错误:
无法解析javax.servlet.http.HttpSession类型.它是从所需的.class文件间接引用的
为什么会出现这个错误?我已为该类型添加了一个import语句,但错误仍然存在.如何删除此错误?
谢谢你的帮助.
我的同事和我正在讨论发布/ SCM系统中标签的价值和用法.我们期待StackOverflow社区提出他们的想法,以帮助我们解决问题.
一方声称标签是发布管理的有价值的补充.它们的一个使用示例:我们做了一个Maven版本,它发布了一个新的Tag(称之为1.0),这是用于此版本的代码快照.此标记应为READONLY分支.当需要修复bug时,我们可以将Tag的副本复制到一个新的分支中(称之为1.1).错误修复去那里.这些修复程序可能会合并回Trunk,以便主dev分支获取错误修复程序.最后,1.1发布并自动创建Tag 1.1.这个循环继续.Tag的主要好处是,如果您因任何原因需要重新发布版本1.0,您可以放心发布Tag 1.0,并确信它从未被任何人更改过.另外,说"Release Tag 1.0"比说"发布版本1的分支1.0是没有修复的原始1.0"更清晰.
另一方声称标签没有提供任何有价值的好处,特别是在像Subversion这样具有全局修订的系统中,这些系统就像CVS中的标签一样.另外,Subversion仅在提交标签时发出警告; 它实际上并没有阻止它.他们的方法是在Trunk中开发,一旦发布,你就会创建一个名为1.0的Branch.您将继续在Trunk中修复错误,如果您需要将这些错误修复重新发布到生产中,您可以将它们合并到1.0 Branch并重新发布1.0.在某些时候,也许在Trunk中的主要修复或功能之后,您将发布并创建Branch 1.1.循环继续.如果您需要发布原始1.0版本,则必须查看Branch 1.0版本1.
显然这两种方法都有效.我想听听社区对哪种方法首选以及为什么这样做的想法.
编辑:我有点担心"最佳"方式取决于底层的SCM系统.要么在Subversion上找到答案,要么尽可能保持SCM不可知.
我创建了一个Java应用程序,它是工作站上唯一活动的应用程序.(类似于自助服务终端系统)
问题是应用程序必须在启动计算机后尽快启动并运行.
我想知道哪个主要操作系统可以配置为提供最短的启动时间?
我正在使用第三方音频和图形库,所以我的选择仅限于Windows XP/Vista,Linux和Solaris.
目前在我的双启动机器上,Fedora需要比Vista更长的时间,但另一方面,我没有太多调整Linux启动时间的经验.因此,如果有人知道Linux可以有更好的快速启动机会,那么我会把时间花在那里.
我还要了解有关调整启动时间和Java启动时间的一般提示.
如何在Crystal Reports中使用多个组(未嵌套)?
我想做的一个小例子:
-hire car header --rentals header (group) ---rental from 01-02-2008 to 01-06-2008 ---rental from 01-08-2008 to 01-09-2008 ---rental from 01-12-2008 to 01-15-2008 --rentals footer --repairs header (group) ---repair from 02-02-2008 to 02-05-2009 --repairs footer -hire car footer
hire car是正常报告,rentals并且repairs是组.这些组不是嵌套的.我目前的问题是我无法真正创建类似的东西,我无法改变结构来解决这个问题......
我对水晶报道完全不熟悉.
让我们假设我用来迭代节点列表的代码
foreach(XmlNode nodeP in node.SelectNodes("Property"))
{
propsList.Add(nodeP.Attributes["name"].Value, true);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,表达式node.SelectNodes("Property")是否在每次迭代期间为每个或一次进行评估?
java ×3
c# ×2
api-design ×1
c++ ×1
clickonce ×1
delegates ×1
deployment ×1
enumeration ×1
inheritance ×1
javascript ×1
linux ×1
list ×1
setinterval ×1
settings ×1
solaris ×1
windows ×1