虽然我把Construtor声明成private,但是还是可以Create.不会在编译时报错,我希望只能有一个实例.TSinglon = class()
private
  Construtor Create();
end.var
  Singlon : TSinglon;但是还是可以Singlon := TSinglon.Create();, 其实他调用的是TObject的Create方法, 在运行期才会报错, 难道就没有方法覆盖父类的construtor函数么?

解决方案 »

  1.   

    有办法的,去看《Inside VCL》
      

  2.   

    TSinglon = class()
    public
      Construtor Create();override;
    end.
      

  3.   

    Create在TObject就被Public出来了,不能隐藏它
    关于singlon模式,Delphi中最好用override NewInstance类函数来实现的.来自:Traveller, 时间:2004-7-19 16:55:54, ID:2719562
    薄荷兄真是一句话点醒梦中人啊!受教受教!
    请看我的实现,这种方式下,用户无论何时调用Create返回的都是同一个指针而不会真的创建新的对象:type
      TTestObj = class(TObject)
      private
        FTestData: string;
      public
        class function NewInstance: TObject; override;
        procedure FreeInstance; override;
        property TestData: string read FTestData write FTestData;
      end;{ TTestObj }var
      mInst: TTestObj;
      mInstRef: Integer;procedure TTestObj.FreeInstance;
    begin
      Dec(mInstRef);
      if mInstRef = 0 then
        inherited;
    end;class function TTestObj.NewInstance: TObject;
    begin
      if not Assigned(mInst) then
        mInst := Inherited NewInstance as TTestObj;
      Inc(mInstRef);
      Result := mInst;
    end;{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
    var
      a: TTestObj;
    begin
      a := TTestObj.Create;
      a.TestData := 'abc';
      FreeAndNil(a);
    end;procedure TForm1.btn2Click(Sender: TObject);
    var
      a: TTestObj;
    begin
      a := TTestObj.Create;
      ShowMessage(a.TestData);
      FreeAndNil(a);
    end;initialization
      mInst := TTestObj.Create;
    finalization
      FreeAndNil(mInst);
    end.参见:
    http://www.delphibbs.com/delphibbs/dispq.asp?lid=2515036
      

  4.   

    光从之前的Delphi编译器的处理而言,楼主如果是在声明这个类的同一个单元(Delphi Unit)当中使用,本就支持调用private成员。
      

  5.   

    ysai的方法不错,但我怕哪里谁又Create出来一堆, 如果能隐藏起来, 免得找错误时麻烦.
      

  6.   

    del123(筷子) ( ) 信誉:100    Blog   加为好友  2007-04-24 10:02:05  得分: 0  
     
     
       ysai的方法不错,但我怕哪里谁又Create出来一堆, 如果能隐藏起来, 免得找错误时麻烦.-----------------------------------------------------------------
    就是这个方法,你自己测试一下就知道了......