" 抽象和封装是互补的概念:抽象关注于对象的可观察行为......封装集中于产生这种行为的实现......封装通常是通过信息隐藏来实现的,这是隐藏所有内容的过程.物体的秘密对其基本特征没有贡献." - 面向对象分析与设计的Grady Booch
您能否通过信息隐藏向我展示一些有说服力的封装优势的例子?
language-agnostic oop encapsulation abstraction information-hiding
在IFrame中使用javascript:parent.location.href更改父窗口时,IE会短暂更改IFrame内容以列出父级正在更改的URL.Firefox,chrome和opera只是更改父窗口.
有没有办法让IE跳过显示IFrame中的网址,只是更改父级?
[编辑]
这是复制它的示例代码.
iframe页面:
<iframe id="finder" name="finder" src="content.html" scrolling="no" height="620" width="620" style="border:1px #c0c0c0 solid;"></iframe>
Run Code Online (Sandbox Code Playgroud)
内容页:
<a href='javascript:parent.location.href="http://www.google.com"'>test link</a>
Run Code Online (Sandbox Code Playgroud) 我正在尝试优化一个基本上运行数百万次测试的软件.这些测试的生成方式可能会有一些重复.当然,如果我能有效地避免它,我不想花时间运行我已经运行的测试.
所以,我正在考虑使用Bloom过滤器来存储已经运行的测试.但是,Bloom过滤器对我来说不安全.它给出了误报.也就是说,它可能会报告我已经进行了一项我没有进行的测试.虽然这在我正在研究的场景中是可以接受的,但我想知道是否有相当于Bloom过滤器,但在相反方面犯了错误,即只给出假阴性.
我没有运气就浏览了文献.
我正在从C#应用程序进行异步Web服务调用:
{
//Put UI in 'loading' state
...
//Now call web service
webServiceProxy.BeginMyMethod(param, new AsyncCallback(MyCallback), null);
}
private void MyCallback(IAsyncResult res)
{
...
//process result
// Put UI back in normal state (yes I'm marshalling back to the UI thread)
}
Run Code Online (Sandbox Code Playgroud)
主线程将应用程序置于"等待"模式,然后回调函数的结束重新启用控件.我偶尔会看到一个错误,UI在加载模式下永远陷入困境.
现在回调代码中可能只有一个错误(那里有相当多的错误),但我对社区的问题是:
"MyCallback"是否值得被称为?假设"BeginMyMethod"没有抛出异常,我可以确定MyCallback会被执行吗?我在BeginXXX函数返回的IAsyncResult上看到"CompletedSynchronously"和"IsCompleted",但我不确定这是否重要.
我有一个程序,其中数组使用string.Split(char [] delimiter)获取其数据.(使用';'作为分隔符.)
但是,有些值为null.即字符串具有没有数据的部分,因此它执行如下操作:
1; 2; ; 3;
这导致null值我的数组.
我怎么摆脱他们?
n!在perl中生成数组的所有排列的最佳(优雅,简单,高效)方法是什么?
例如,如果我有一个数组@arr = (0, 1, 2),我想输出所有排列:
0 1 2
0 2 1
1 0 2
1 2 0
2 0 1
2 1 0
Run Code Online (Sandbox Code Playgroud)
它应该是一个返回迭代器的函数(延迟/延迟评估,因为它n!可能变得非常大),所以它可以这样调用:
my @arr = (0, 1, 2);
my $iter = getPermIter(@arr);
while (my @perm = $iter->next() ){
print "@perm\n";
}
Run Code Online (Sandbox Code Playgroud) 如何使用vim跳转到函数定义?例如,使用Visual Assist,我可以在函数下键入Alt+ g,它会打开一个上下文菜单,列出带有定义的文件.
我怎样才能在vim中做这样的事情?
为什么我不能在子类中定义具有相同名称的成员?每个类继承一个表rowversion timestamp,每个表中都有一个字段.似乎实体设计者应该允许这样做,并使用new属性上的关键字来实现它.解决方法是什么?如果我不能使用,new如何在具有不同值的继承链中指定相同的字段?对于具有rowguids,modifiedbys,modifieddates等的其他数据库,情况可能如此.
编辑:我想这样做的逻辑方法是重命名对该字段的引用,即PersonRowversion在Student下降的类中Person.
我错过了一块可以自动跟踪这些字段的EF吗?
我遇到了一个奇怪的问题,我的系统时钟知道它是夏令时,但glibc似乎没有.这是一个最新的Ubuntu安装,我检查了/ etc/localtime,它有正确的转换时间,用于上周切换到夏令时.
对我来说,目前正确的时区是太平洋夏令时(UTC-7).当我问我的系统我在哪个时区时,它正确告诉我:
$ date +%z
-0700
Run Code Online (Sandbox Code Playgroud)
但是当我运行以下程序时:
#include <time.h>
#include <stdio.h>
int main() {
tzset();
printf("%lu\n", timezone);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是错误的:
28800
Run Code Online (Sandbox Code Playgroud)
对应于UTC-8或太平洋标准时间.(不,TZ未在我的环境中设置)
我认为glibc和日期程序会从同一来源获得他们的时区信息,但显然要么他们没有,要么我误解了glibc时区全球的运作方式.
那么基本问题是:
我需要从File1,File2,...到File99调用文件.
我尝试了下面的失败
cat test > {File1 .. File99}
Run Code Online (Sandbox Code Playgroud)
没有单词File的命令不起作用.
arrays ×2
c# ×2
.net ×1
abstraction ×1
algorithm ×1
bash ×1
bloom-filter ×1
c ×1
function ×1
glibc ×1
iframe ×1
inheritance ×1
javascript ×1
null ×1
oop ×1
perl ×1
permutation ×1
string ×1
terminal ×1
timezone ×1
vim ×1
web-services ×1