用一个字符名称调用一个属性或者方法

在设计的大部分时候,用户可以发现一个对象的属性和方法,并且可以写一些代码来处理这些方法。然而在一些时候,不能提前知道一个对象的属性和方法,或者只是想在运行程序的时候能具有指定属性和运行不同方法的灵活性。
举一个例子,一个客户端的运行程序通过给一个COM组件一个操作来计算一个表达式。假想现在正在给服务器加一个需要新的操作描述的函数。不幸的是,这时必须重新编译和发布客户端软件才能使用新的操作。为了避免这种情况,用户可以使用CallByName函数来把新的操作当成一个字符给服务器加载这个函数,而不需要改变运用程序。
CallByName函数允许用户在运行程序的时候使用一个字符来指定一个属性或者方法,具体使用方法如下:
Result=CallByName(Object,ProcedureName,CallType,Arguments())
第一个参数Object表示用户需要操作的对象,第二个参数ProcedureName指的是用户要操作的方法、属性或者过程名称的字符表示,CallType是一个常数选项,当被操作的是一个方法时,值为VBMethod;当被操作的是设置属性时,值为VbLet;当操作的是得到属性时,值为VbGet;当被操作的是设置对象属性的值时,值为VbSet,最后一项选项是可选的。它包括了一个变量数组,该数组包含了过程的所有参数。
假设有一个COM组件叫做MathServer,含有一些平方根运算的函数。程序有两个TextBox控件:第一个控件用来输入需要进行计算的表达式,第二个控年用来输入需要进行的计算方法,就可以在进行计算按钮的点击事件中加入以下代码:
Private Sub Command1_Click()
    Text1.Text=CallByName(MathServer,Text2.Text,VBMethod,Text1.Text)
End Sub
如果在第一个Text中输入"64/4",在第二个Text中输入"SquareRoot",则上面的代码就会调用求平方根函数并且返回“4”在第一个Text中。但是如果在第一个Text中输入了不合法的字符,或者在第二个Text中并没有输入一个方法,而中输入了一个属性,或者该方法还需要一个参数的话,则会产生运行错误。正如猜测的一样,如果需要使用这种用字符名称调用一个属性或者方法的话,就必须把出错处理做得非常好。
CallByName在有一些情况下非常有用,但是必须考虑它的一些缺点,比如使用CallByName调用一个过程会比后期绑定慢一些,但如果用户要调用一个经常要重复的函数的话,例如一个内部循环,那么使用CallByName将会表现得快一些。

时间: 2024-11-03 16:30:13

用一个字符名称调用一个属性或者方法的相关文章

把一个字符插入到一个升序排列的字符串中

namespace Tools.Module   {       public class Tools      {            public Tools()           {            }             public static string GetStrFromStr(string src,int Index)          {                if(src.IndexOf(",")==0) src = src.Remove

remopte script文档(转载自微软)<八>调用对象属性和方法

文档: 调用对象属性和方法当您调用一个服务器方法时,该方法不返回单个值.而是创建一个调用对象,该对象包含被调用过程的返回值和状态信息.下表列出了调用对象的属性.属性 描述 id 调用的唯一标识号,它是首次调用时产生的.return_value 方法的返回值──如果有的话.data 产生 remote scripting 调用时,服务器返回的粗数据,是以 XML 标记封装的.有关详细信息,请参阅检查错误.status 指示方法调用当前状态的值.可能值包括:-1     失败0     完成1   

《Python Cookbook(第2版)中文版》——第1章 文本 1.1 每次处理一个字符

第1章 文本 引言 感谢:Fred L. Drake, Jr.,PythonLabs 对于脚本语言来说,文本处理任务构成了一个重要的组成部分,每个人都会同意文本处理非常有用.每个人都会有一些文本需要重新格式化或者转化为另一种形式.问题是,每个程序都与另一个程序有点不同,无论它们是多么相似,想提取出一些可复用的代码片段并用它来处理不同的文件格式仍然是非常困难的. 什么是文本 看起来问题有点简单得过分了,事实上,我们看到了文本,就知道了什么是文本,文本是一串字符,这正是它与二进制数据之间的不同.二进

字符-如何对一个用char数组存储的计算公式求解

问题描述 如何对一个用char数组存储的计算公式求解 比如一个char数组存放的是(5+8)/3+4.5*2--1 其中4.5是以4 . 5 存放的,-1的存法是 -一个字符,1一个字符 解决方案 这个是编译原理里面的一个基础例子.就是语法分析的过程.很多编译原理的第一个练习题就是这个.通过语法分析实现一个计算器功能.把字符串分解成一个语法树.再递归计算.去网上搜索下计算器的实现代码.很多的. 解决方案二: 4.5 是三个字符吗

一个非常不错的一个正则练习JS版

技术含量不高,主要是平时使用正则多了,在代码上调试太麻烦了,干脆做这个来试比较快~~~送给那些喜欢正则的朋友~~~ 做得头晕脑涨,实在找不出几个正则例子来给新手学习,所以现在俺里面的帮助文件里面也才三个例子而以! 由于本人的语言表达实在不怎么样,而以材料一个人制作麻烦,希望有热心人士提供经典的正则例子,最好附上详解,以便新手学习! <html> <head> <title>无殇 - 正则练习器</title> <style type="tex

JavaScript 正则表达式之RegExp属性、方法及应用分析

使用RegExp的显式构造函数,语法为:new RegExp("pattern"[,"flags"]). 使用RegExp的隐式构造函数,采用纯文本格式:/pattern/[flags]. pattern部分为要使用的正则表达式模式文本,是必须的.在第一种方式中,pattern部分以JavaScript字符串的形式存在,需要使用双引号或单引号括起来:在第二种方式中,pattern部分嵌套在两个"/"之间,不能使用引号. flags部分设置正则表达

javascript RegExp 对象属性与方法和应用

JavaScript提供了一个RegExp对象来完成有关正则表达式的操作和功能,每一条正则表达式模式对应一个RegExp实例.有两种方式可以创建RegExp对象的实例. 使用RegExp的显式构造函数,语法为:new RegExp("pattern"[,"flags"]). 使用RegExp的隐式构造函数,采用纯文本格式:/pattern/[flags]. pattern部分为要使用的正则表达式模式文本,是必须的.在第一种方式中,pattern部分以JavaScri

深入解析C++中的字符数组和处理字符串的方法_C 语言

C++字符数组 用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符.字符数组具有数组的共同属性.由于字符串应用广泛,C和C++专门为它提供了许多方便的用法和函数. 字符数组的定义和初始化 定义字符数组的方法与前面介绍的类似.例如: char c[10]; c[0]=′I′;c[1]=′ ′;c[2]=′a′;c[3]=′m′;c[4]=′ ′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;c[9]=′y′; 上面定义了c为字符数组,包含10个元素.在赋值

JavaScript:prototype属性使用方法

参考:http://bokee.shinylife.net/blog/article.asp?id=455http://dev.csdn.net/article/84222.shtmhttp://www.cnblogs.com/goody9807/archive/2007/04/16/715109.html 一.基本使用方法       prototype属性可算是JavaScript与其他面向对象语言的一大不同之处. 简而言之,prototype就是"一个给类的对象添加方法的方法",