我最近对Getters and Setters遇到了很多不同的看法,所以我想我应该把它变成自己的问题.
一个先前的问题我的收到的规定制定者不应该有任何的副作用立即发表评论(后来被删除),和SetProperty方法将是一个更好的选择.
实际上,这似乎也是微软的意见.但是,它们的属性通常会引发事件,例如设置Resized表单Width或Height属性时.OwenP还指出"你不应该让一个房产抛出异常,房产不应该有副作用,顺序应该无关紧要,房产应该相对快速地返回."
然而,Michael Stum声明在验证setter中的数据时应该抛出异常.如果你的setter没有抛出异常,你怎么能有效地验证数据,因为这个问题的许多答案都表明了这一点?
什么时候你需要举办一个活动,比如几乎所有的微软控制公司呢?那么你是不是受到任何订阅你的活动的怜悯?如果他们的处理程序执行大量信息,或者自己抛出错误,那么你的setter会发生什么?
最后,getter中的延迟加载怎么样?这也可能违反以前的准则.
放置在getter或setter中可以接受什么,以及只有accessor方法应该保留什么?
编辑:
来自MSDN中的另一篇文章:
这些
get和set方法通常与其他方法没有区别.它们可以执行任何程序逻辑,抛出异常,被覆盖,并使用编程语言允许的任何修饰符进行声明.但请注意,属性也可以是静态的.如果属性是静态的,那么get和set方法可以做什么有限制.有关详细信息,请参阅编程语言参考
我有一个在32位Windows 2008 Server上运行的Java(Swing)应用程序,它需要将其输出呈现为屏幕外图像(然后由另一个C++应用程序拾取以便在其他地方呈现).大多数组件都能正确呈现,除非在奇怪的情况下,刚刚失去焦点的组件被另一个组件遮挡,例如,如果有两个JComboBox彼此接近,如果用户与较低的组件交互,则点击上面一个,所以它的下拉与另一个盒子重叠.
在这种情况下,失去焦点的组件在遮挡它之后呈现,因此出现在输出的顶部.它在正常的Java显示中正确呈现(在主显示器上全屏运行),并且尝试更改有问题的组件的层无济于事.
我使用自定义RepaintManager将组件绘制到屏幕外图像,我假设问题在于为每个有问题的组件调用addDirtyRegion()的顺序,但我想不出一个好方法识别何时发生这种特定状态以防止它.黑客攻击以便刚刚失去焦点的对象不会被重新绘制可以解决问题,但显然会导致更大的问题,即在其他所有正常情况下都不会重新绘制它.
有没有办法以编程方式识别这种状态,或重新排序事物,以便它不会发生?
非常感谢,
缺口
[编辑]添加了一些代码作为示例:
重绘经理和相关课程:
class NativeObject {
private long nativeAddress = -1;
protected void setNativeAddress(long address) {
if ( nativeAddress != -1 ) {
throw new IllegalStateException("native address already set for " + this);
}
this.nativeAddress = address;
NativeObjectManager.getInstance().registerNativeObject(this, nativeAddress);
}
}
public class MemoryMappedFile extends NativeObject {
private ByteBuffer buffer;
public MemoryMappedFile(String name, int size)
{
setNativeAddress(create(name, size));
buffer = getNativeBuffer();
}
private native long create(String name, int size);
private native ByteBuffer getNativeBuffer(); …Run Code Online (Sandbox Code Playgroud) 在Getting things gnome代码库中,我偶然发现了这个import语句
from GTG import _
Run Code Online (Sandbox Code Playgroud)
并且不知道它意味着什么,从未在文档中看到这一点,并且快速的搜索/谷歌搜索没有改变任何东西.
我有一个非常简单的RESTful webservice(即www.test.com/test.xml?date1=05/252010&date2=05252010)
这会返回相当简单的XML.客户有兴趣通过SSIS使用此Web服务并将其导入表中.
什么是使用SSIS调用RESTful Web服务的最佳方式 - 我看到的所有示例都围绕基于WSDL的Web服务?
如何将参数传递给Web服务(当前日期等)?
我对SSIS并不熟悉,并且无法找到与RESTful Web服务交互的良好文档.
在我的测试中,显而易见的是Mobile Safari的HTML5应用程序缓存实现有5mb的大小限制.
有谁知道如何规避或提高这个?我应该知道一些未曝光的元标记吗?我必须为离线应用缓存一些视频内容,5mb还不够.
据我了解,在使用F#时,您必须按照依赖顺序手动列出源文件以获得编译器的好处(如果有任何解决方法,请告诉我!)
从左到右在命令行中列出它们显然不会扩展.有没有办法至少让它接受文本文件中的文件列表,每行一个,最好能够插入空白行和注释?我已经检查了编译器选项,但我没有看到任何看起来很有希望的东西.
我在一个类中使用此代码来使webbrowser控件访问一个网站:
void myClass::visitWeb(const char *url)
{
WCHAR buffer[MAX_LEN];
ZeroMemory(buffer, sizeof(buffer));
MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, url, strlen(url), buffer, sizeof(buffer)-1);
VARIANT vURL;
vURL.vt = VT_BSTR;
vURL.bstrVal = SysAllocString(buffer);
// webbrowser navigate code...
VariantClear(&vURL);
}
Run Code Online (Sandbox Code Playgroud)
我从另一个void函数调用visitWeb,该函数在app的handlemessage()上调用.我需要在这里做一些内存释放吗?我看到varurClear正在释放vURL,但是我应该为缓冲区释放内存吗?我被告知在另一个bool我在同一个应用程序中我不应该释放任何东西,因为当bool返回true/false时一切都清除了,但是这个空白会发生什么?
我希望有以下内容:
<span title="This is a "good" title.">Catch me in the rice.</span>
Run Code Online (Sandbox Code Playgroud)
显然,浏览器无法很好地呈现这一点.请向我提供有关"我必须使用?"的转义序列或编码的信息.
我一直在使用puttycyg作为我的rails开发的Cygwin终端.我在项目管理网站上设置了一个git存储库,现在我想用以下命令将代码推送到它:
git push origin master
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
error: cannot run ssh: No such file or directory
fatal: unable to fork
Run Code Online (Sandbox Code Playgroud)
我知道ssh用于身份验证,但我不知道是否需要设置任何东西才能使用它.
我是grails的新手,并尝试创建一个表单,允许用户更改与他/她的帐户相关联的电子邮件地址.
它要求用户输入他们当前的密码以及他们想要使用的新电子邮件地址.如果用户输入了错误的密码或无效的电子邮件地址,那么它应该使用适当的错误消息拒绝它们.
现在,可以通过grails中的约束来完成电子邮件验证,但密码更改必须与其当前密码相匹配.我已将此检查作为服务类的方法实现.
见下面的代码:
def saveEmail =
{
def client = ClientUser.get(session.clientUserID)
client.email = params.email
if(clientUserService.checkPassword(session.clientUserID , params.password) ==false)
{
flash.message = "Incorrect Password"
client.discard()
redirect(action:'changeEmail')
}
else if(!client.validate())
{
flash.message = "Invalid Email Address"
redirect(action:'changeEmail')
}
else
{
client.save();
session.clientUserID = null;
flash.message = "Your email address has been changed, please login again"
redirect(controller: 'clientLogin' , action:'index')
}
}
Run Code Online (Sandbox Code Playgroud)
现在我发现奇怪的是,如果我输入了一封无效的电子邮件,那么就不会保存更改(如预期的那样)但是如果我输入了错误的密码和有效的电子邮件,那么它会保存更改,甚至将它们写回到数据库,即使它会给出正确的"无效密码"错误消息.
我很困惑,所以在所有if/else if/else块中设置了断点,发现它按预期命中了第一个if语句而没有击中其他语句,所以它永远不会遇到对save()方法的调用,然而它无论如何都得救了.
经过一些研究后,我来到了discard()方法的文档中,您可以在上面的代码中看到它.所以我添加了这个,但仍无济于事.我甚至尝试使用discard然后再次从DB重新加载客户端对象,但仍然没有骰子.
这是非常令人沮丧的,我会感激任何帮助,因为我认为这肯定不是一个复杂的要求!
java ×2
c++ ×1
cygwin ×1
escaping ×1
f# ×1
getter ×1
git ×1
grails ×1
grails-orm ×1
groovy ×1
html ×1
html5 ×1
import ×1
properties ×1
puttycyg ×1
python ×1
quotations ×1
rest ×1
setter ×1
ssh ×1
ssis ×1
swing ×1
visual-c++ ×1
web-services ×1