
BOS_HOME\BOSModular\boscommon\eclipse\plugins\com.kingdee.bos.toolcommon_6.1.0\bosconfig.xml
配置项的结构为:
<configitem name="ExtendProperty">
<configitem name="isVerifyNumberInControllerBean"><!--扩展属性名称-->
<attribute key="group" value="userDefine"/><!--扩展属性所在组-->
<attribute key="required" value="false"/><!--扩展属性是否必填-->
<attribute key="defaultvalue" value="true"/><!--扩展属性默认值-->
<attribute key="alias" value="是否在服务端校验编码"/><!--扩展属性别名-->
<attribute key="type" value="boolean"/><!--扩展属性值类型-->
<attribute key="isMultiLanguage" value="false"/><!--扩展属性是否为多语言配置-->
<attribute key="object" value="entity"/><!--扩展属性应用目标-->
<attribute key="filter" value="com.kingdee.eas.framework.app.ObjectBase"/><!--扩展属性过滤条件-->
<attribute key="description" value="是否在服务端校验编码"/><!--扩展属性描述信息-->
</configitem>
</configitem>
以上内容为一个扩展属性的完整配置,添加自定义扩展属性只需要将配置项添加到
<configitem name="ExtendProperties">自定义</configitem>中即可。
添加完之后,重新启动BOS,就可以在图2“可供选择的扩展属性”列表中看到自定义的扩展属性。
以上的配置是为了支持“所见所得”的需要,另外一种方式就是直接修改实体元数据文件,这里就不详细描述了。
扩展类和扩展方法的使用场景作为C#程序员,我们一直要跟.net自带类库(BCL - Base class Library)或者第三方类库打交道,有时候我们无法查看他们的代码,但是我们需要一些新的功能,Helper类就应运而生了,我们开发出一个个的静态方法以方便调用,C#3.0之后微软为我们提供了扩展类,以实现对原有类的扩展,这是一个非常好的替代Helper类的途径。
扩展类和扩展方法的使用方法
首先举一个扩展类的例子,假定我们需要string类实现一个新的功能,通过属性名字获取属性的值,我们可以通过扩展类的扩展方法实现。
/// <summary>
/// 扩展类和扩展方法必须是静态的,扩展方法的第一个参数必须为原有类自身,this关键字是必须的
/// </summary>
public static class StringExtension
{
public static object GetValueByName(this object self, string propertyName)
{
if (self == null)
{
return self
}
Type t = self.GetType()
PropertyInfo p = t.GetProperty(propertyName)
return p.GetValue(self, null)
}
}
原有类可以直接调用扩展方法,string str = "123"int len = str.GetValueByName("Length")怎么样,方便吧。
扩展方法必须遵守以下规则:
1.扩展类必须是静态的;
2.扩展方法必须是静态的
3.扩展方法的第一个参数必须以this开头,参数必须是原有类的类型,如果我们扩展decimal类,第一个参数必须为decimal
为什么扩展类和扩展方法必须为静态的
让我们看一看编译之后的MSIL代码吧,是不是很像我们曾经写过的Helper类调用方法,看来str.GetValueByName("Length")等效于StringExtension.GetValueByName(str,"Length").
这是微软对编译器做的一个优化,使之更人性化,使用更方便。微软的出发点可能只是希望对原有类做方法扩展,不希望把扩展类作为实体类来使用,所以从设计上就已经做了处理,杜绝这种情况发生,静态类是不允许被实例化的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)