我有一个Word用户表单,包含60多种不同类型的控件.我想在每次触发control_change事件时评估表单并更改表单的提交按钮的启用状态.但是,我真的不想在更改事件处理程序上编写和维护60.
每个.net开发人员都知道属性的概念.粗略的99.99%,它只是一个元数据粘合在一起的两个方法,一个吸气剂和一个设定器.
通常使用add,remove和invoke方法对事件也是如此.
ECMA-335描述了一种"其他"方法语义,适用于属性或事件.从概念上讲,财产或事件可能有多种"其他"方法.
今天是我用"其他"方法偶然发现房产的第一天.当然,它必须与COM有关.EnvDTE程序集中的EnvDTE.Property接口(用于向Visual Studio编写插件)包含一个定义如下的属性:
.property object Value()
{
.custom instance void [mscorlib]System.Runtime.InteropServices.DispIdAttribute::.ctor(int32) = ( 01 00 00 00 00 00 00 00 )
.get instance object EnvDTE.Property::get_Value()
.other instance void EnvDTE.Property::let_Value(object)
.set instance void EnvDTE.Property::set_Value(object)
}
Run Code Online (Sandbox Code Playgroud)
将let_Value定义为:
.method public hidebysig newslot specialname abstract virtual
instance void let_Value([in] object marshal( struct) lppvReturn) runtime managed internalcall
{
.custom instance void [mscorlib]System.Runtime.InteropServices.DispIdAttribute::.ctor(int32) = ( 01 00 00 00 00 00 00 00 )
}
Run Code Online (Sandbox Code Playgroud)
显然,VB.NET之前的VBScript和VB版本可以使用Let关键字定义属性.并且Let与Set具有相同的签名.我觉得这里有关系.
但有没有人知道这个属性是如何用EnvDTE编写的语言声明的?我怎么能用相同的模式创建一个程序集(不使用ilasm,这太容易了)?还有人遇到类似的财产吗?
有没有人见过其他"其他"属性,可能与这个属性有不同的语义?如果是的话,他们习惯了什么?
我有这样的代码:
let accessAllowed;
accessAllowed = (2>18) ? true : false;
alert(accessAllowed);
Run Code Online (Sandbox Code Playgroud)
但是,当我使用它时:
let accessAllowed;
let accessAllowed = (2>18) ? true : false;
alert(accessAllowed);
Run Code Online (Sandbox Code Playgroud)
结果是一个错误,并且 JavaScript 都不起作用。
作为 JS 的新手,我不确定这是否是let. 我在其他地方找不到任何关于此的信息。