我将库绑定到单点触控。就像NullReferenceException
在单触上发生的一件非常糟糕的事情一样,我想通过抛出一段System.InvalidOperationException
时间访问一个会抛出的属性来防止它。
对于方法,我使用[PrologueSnippetAttribute]
. 但由于显而易见的原因,它不适用于属性。我怎么能对属性有相同的行为?
我将库绑定到单点触控。就像NullReferenceException
在单触上发生的一件非常糟糕的事情一样,我想通过抛出一段System.InvalidOperationException
时间访问一个会抛出的属性来防止它。
对于方法,我使用[PrologueSnippetAttribute]
. 但由于显而易见的原因,它不适用于属性。我怎么能对属性有相同的行为?
继承SnippetAttribute
自的 定义与( generator.cs ) 源代码不匹配。PrologueSnippetAttribute
btouch
生成器只处理方法上的属性,而不是属性(即使属性标有AttributeTargets.Property
)。因此,您需要执行以下操作:
[Export ("position")]
PointF Position {
[PrologueSnippet ("if (!isInitialized) throw new InvalidOperationException ();")]
get;
[PrologueSnippet ("if (!isInitialized) throw new InvalidOperationException ();")]
set;
}
这比复制属性(带有[Internal]
版本)更好。我相信原因是,大多数时候,相同的逻辑不能用于 getter 和 setter。
当然,我可以标记属性 [Internal] 并为它编写一个公共代理作为额外代码,如下所示:
在 ApiDefinition.cs
...
[Export ("position")]
[Internal]
PointF PositionInt { get; set; }
...
然后在 Extra.cs
...
public PointF Position {
get {
if (!isInitialized)
throw new InvalidOperationException ();
return PositionInt;
}
set {
if (!isInitialized)
throw new InvalidOperationException ();
PositionInt = value
}
}
...
但是更快,更自动化的东西会很好