用过MonoRail的朋友应该知道它提供的对象成员数据绑定功能非常方便,通过标记参数属性或方法就可以自动把提交回来的数据和对象成员进行绑定;有了这些方便的功能的确可以节省大量的set代码。不过这些功能只是MonoRail提供,于是实现类似的功能方便自己开发。
实现目标:可以灵活方便地实现数据绑定。
OrderSearch search = FormContext.BindObject<OrderSearch>();
Orders order = FormContext.BindObject<Orders>("order");
制定规则和约束
首先确定WEB提交的数据和成员属性的映射关系,可以通过名称约定的方式:
<input id="Text1" name="companyname" t...
类的静态成员与一般的类成员不同: 静态成员与对象的实例无关,只与类本身有关。他们用来实现类要封装的功能和数据,但不包括特定对象的功能和数据,静态成员包括静态方法和静态属性。
静态属性包含在类中要封装的数据,可以由所有类的实例共享。实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量。
我们在下例中使用了一个静态属性Counter::$count。它属于Counter类,而不属于任何Counter的实例。你不能用this来引用它,但可以用self或其它有效的命名表达。在例子中,getCount方法返回self::$count,而不是Counter::$count。
静态方法则实现类需要封装的功能,与特定的对象无关...
采用取成员函数指针的地址的方法,先把指向成员函数指针的指针强制转化为别的类型,如unsigned*,当然同样可以通过此转化后的指针经过相反的变换来调用成员函数。于是乎要转化为void*的问题也随之可解,如下示例: /* VS2003下编译运行 */ class AbstractMethod { public: virtual void show(){} // = 0; // 可以是纯虚函数,这里为了测试方便不使用纯虚函数! void fun() { cout << "I was called!" << endl; } void fun1() { cout << "I was called!" << endl; } }; int main() { // 定义成员函数指针类型 typedef void (AbstractMethod::*MFP)(void); // 转化函数指针为别的指针 MF...