今天用了下class helper,觉得颇有意思.或许好好发展一下可以引起程序设计的小小变革.帮助上的例子如下:
type
   TMyClass = class
      procedure MyProc;
      function  MyFunc: Integer;
   end;   ...   procedure TMyClass.MyProc;
   var X: Integer;
   begin
      X := MyFunc;
   end;   function TMyClass.MyFunc: Integer;
   begin
       ...
   end;...type 
   TMyClassHelper = class helper for TMyClass
     procedure HelloWorld;
     function MyFunc: Integer;
   end;   ...   procedure TMyClassHelper.HelloWorld;
   begin
      writeln(Self.ClassName); // Self refers to TMyClass type, not TMyClassHelper
   end;   function TMyClassHelper.MyFunc: Integer;
   begin
     ... 
   end;
 
...
   
var 
  X: TMyClass;
begin
  X := TMyClass.Create;
  X.MyProc;    // Calls TMyClass.MyProc
  X.HelloWorld; // Calls TMyClassHelper.HelloWorld
  X.MyFunc;    // Calls TMyClassHelper.MyFunc这样可以不用派生就扩展原来的组件的功能。
那么对于一个已有的系统,扩展功能将更加方便。而不需要派生一个类,然后把原来代码中的引用该类的名字改掉。
也许就设计模式来讲,这种复用模式不好。但从工业应用,响应快速开发的角度来看,应该是相当不错的。但是class helper不支持虚函数,不支持成员变量,支持静态成员变量.支持普通的成员方法如果
能够做到支持成员变量.或者能够支持虚函数,并让class helper中的函数可以与其"派生"的类中
的虚方法进行交互.(关键是"派生"类的方法可以驱动class helper中的方法). 这样的话或者会开
创一种新的软件设计模式,呵呵,谁知道呢.

解决方案 »

  1.   

    呵呵,这个东西用来打补丁差不多,实际开发还是少用为妙吧,引用下:http://davidglassborow.blogspot.com/2006/05/class-helpers-good-or-bad.html
      

  2.   

    打开了,那个连接对class helper似乎也是持肯定态度的啊。
    I started off using Class Helpers to add library code to VCL objects, for library code. I now find myself using them as a design decision, putting minimalist interfaces on my objects, and adding all the helper and nicety functions as helper objects. As Marco Cantu points out, it looks like the next version of C# will support a similar feature. Personally I feel its another great feature of Delphi giving us a competitive advantage when developing with Object Pascal.
      

  3.   

    而且这段话说得太好了。
    类设计最简单的接口,使用class helper来丰富接口以便与使用。这样,由类保持设计上的完善性,由class helper保证变化上的支持。我的感觉是,可以由类保持相对稳定的设计,由class helper保证具体的,多变的应用需求变化。
      

  4.   

    如果可能的话,还是应该尽可能少用class helper,就好象.NET推荐少用partial class一样。class helper将一个类型的一些成员和方法放到了另外一个地方,会对代码维护不利。这个也是Delphi源码中主要使用class helper来扩展.NET CLR基础类型的原因。微软C#中还没有和class helper对应的语法。虽然.NET 2.0引入的partial class和3.5将引入的extension method和这一概念类似,但是都不如class helper强大。