我在微软实践测试中遇到了这个问题,我感到很困惑.这是一个问题:
假设已声明了Alarm事件,AlarmEventArgs类和AlarmEventHandler委托,以下哪个C#代码示例是引发事件的正确方法?
以下是他们提供的"正确"答案:
AlarmEventArgs e = new AlarmEventArgs(1, 2);
AlarmEventHandler handler = Alarm;
if (handler != null)
{
handler(this, e);
}
Run Code Online (Sandbox Code Playgroud)
但是,还有另一个看似正确的答案.
AlarmEventArgs e = new AlarmEventArgs(1, 2);
if (Alarm!= null)
{
Alarm (this, e);
}
Run Code Online (Sandbox Code Playgroud)
我个人总是使用第二种方法.它工作得很好.有人可以告诉我为什么我应该使用第一种方法而不是第二种方法?
在VB.NET(而不是c#)...
我想创建一个可以被侦听器取消的事件.就像你可以取消winforms表格的结束事件一样,在这种情况下表格不会关闭.
我已经从EventArgs实现了一个派生类,它具有可设置的Cancel属性,如下所示:
Public Class AnnounceNavigateEventArgs
Inherits EventArgs
Private _cancel As Boolean = False
''' <summary>
''' Initializes a new instance of the AnnounceNavigateEventArgs class.
''' </summary>
Public Sub New(ByRef cancel As Boolean)
_cancel = cancel
End Sub
Public Property Cancel() As Boolean
Get
Return _cancel
End Get
Set(ByVal value As Boolean)
_cancel = value
End Set
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
请注意,我将取消参数byRef传递给构造函数.
我设置的监听器将属性设置为Cancel = True.我认为ByRef意味着_cancel和cancel都指向堆栈上的相同位置,因此设置_cancel = true会使cancel = true.但这不是我得到的行为._cancel在setter中变为true但我猜构造函数的参数仍为false.
在vb.net中执行此操作的正确方法是什么?
赛斯
var $field = $(this);
if ($field.is('input')) {
alert(1);
if ($field.attr('type') == 'checkbox') {
alert(2);
if ($field.attr('value') == "true")
return $field.attr('checked');
}
return $field.val();
}
Run Code Online (Sandbox Code Playgroud)
我想检查复选框的值是否为真我添加属性选中=选中复选框.但我的代码错了.请帮帮我.谢谢
在java中使setter返回"this"是一个好主意还是坏主意?
public Employee setName(String name){
this.name = name;
return this;
}
Run Code Online (Sandbox Code Playgroud)
这种模式很有用,因为你可以链接这样的setter:
list.add(new Employee().setName("Jack Sparrow").setId(1).setFoo("bacon!"));
Run Code Online (Sandbox Code Playgroud)
而不是这个:
Employee e = new Employee();
e.setName("Jack Sparrow");
...and so on...
list.add(e);
Run Code Online (Sandbox Code Playgroud)
......但这有点违反标准惯例.我想这可能是值得的,因为它可以让那个setter做一些有用的东西.我已经看到这种模式使用了一些地方(例如JMock,JPA),但它似乎并不常见,并且通常仅用于定义良好的API,其中此模式随处可用.
更新:
我所描述的内容显然是有效的,但我真正想要的是关于这是否普遍可以接受,以及是否存在任何陷阱或相关最佳实践的一些想法.我知道Builder模式,但它比我描述的要多一些 - 正如Josh Bloch描述的那样,有一个关联的静态Builder类用于创建对象.
我可以将节点发送到XSLT函数吗?例如:
<books>
<book>
<author>a1</author>
<price>10</price>
<year>2009</year>
</book>
<!-- ... -->
</books>
Run Code Online (Sandbox Code Playgroud)
我可以将<book>
元素发送到函数 - 在该函数中我想处理book(<author>
,<price>
或<year>
)下的节点
我可以创建一个xsl:function如下所示?
<xsl:function name="util:checkNode" as="xs:boolean">
<!-- I would like to know xml schema data type for the param -->
<xsl:param name="nodeP" as="****"/>
</xsl:function
If yes, what xsl schema type to the param ?
Run Code Online (Sandbox Code Playgroud)
看起来我通过说函数而不是xsl来创建很多混乱:函数---- :(
我对状态模式的以下实现有一些疑问:
我有一个Order对象.为简单起见,我们假设它有一个数量,productId,价格和供应商.此外,订单可以转换有一组已知状态:
1)Order.isValid()在状态之间变化.即,在状态中,一些操作无法完成.所以,它们看起来像:
void setQuantity(int q){
if(_state.canChangeQuantity())this.quantity = q;
否则抛出异常.
}
这是正确的,或者我应该得到每个国家实施setQuantity操作?在那种情况下,哪里会存储值?在顺序,还是国家?在后一种情况下,我将不得不在每个状态转换中复制数据?
2)orderProcessor.process(order)是一个检查order.IsValid的对象,将订单转换为某个状态,将其保存到db并执行一些自定义操作(在某些状态下,admin会通知,在其他状态下会通知客户端等) .每个州都有一个.
在StateAOrderProcessor中,通过电子邮件通知检查订单的人员,订单将转换为状态b.
现在,这将推动Order类之外的状态转换.这意味着Order有一个'setState'方法,因此每个处理器都可以改变它.这个从外面改变状态的事情听起来不太好听.这是对的吗?
3)Ahother选项是将所有验证逻辑移动到每个州的处理器,但现在我必须跟踪订单数量的变化,以查看该操作在当前状态下是否有效. 这让我的订单变得贫血.
你们觉得怎么样?你能给我一些建议来更好地设计这件事吗?
非常感谢你.
缺口
我希望允许我的控件的用户选择控件的许可方法.选择来自枚举,因此他们必须选择我为其设计的方法之一.需要在运行时执行代码之前选择此许可证.因此,我希望他们在设计时选择一个值.此外,我不希望这个属性在运行时可写,如果可以避免的话.有没有办法让房产只在设计时提供?
我处于这样一种情况,我需要在C#和WPF中使用多重继承.
我正在制作一个控制器,让我们说Control-1来自组合框控制.我为我的控件Control-1类添加了一些依赖属性和方法.我的control-1中的大多数属性和方法(实际上是属性和方法的实现)也可以在另一个名为Control-2的控件中使用,但该控件不应该从组合框控件中派生出来(与Control-的情况一样) 1).
我想在另一个类中分离常见的依赖属性和方法,但是在另一个类中分离它需要我从组合框控件和包含属性和方法的公共类派生我的控件类(control-1).
有没有可以解决我的问题的设计.
注意:问题是关于使用WPF框架的依赖属性的C#,它需要静态成员而不仅仅是C#.
有关
用空格替换每个前导或尾随连字符的最佳方法是什么?
例如,我想要
--- AB --- C-def--
成为
000ab --- c-def00(零为空格)
我试图用Python做到这一点,但我似乎无法想出一个可以进行替换的正则表达式.我想知道是否有另一个更好的方法来做到这一点?