首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Delphi无法隐藏Constructor函数?解决方法

2012-02-17 
Delphi无法隐藏Constructor函数?虽然我把Construtor声明成private,但是还是可以Create.不会在编译时报错,

Delphi无法隐藏Constructor函数?
虽然我把Construtor声明成private,但是还是可以Create.不会在编译时报错,我希望只能有一个实例.

TSinglon   =   class()
private
    Construtor   Create();
end.

var
    Singlon   :   TSinglon;

但是还是可以Singlon   :=   TSinglon.Create();,   其实他调用的是TObject的Create方法,   在运行期才会报错,   难道就没有方法覆盖父类的construtor函数么?



[解决办法]
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
[解决办法]
del123(筷子) ( ) 信誉:100 Blog 加为好友 2007-04-24 10:02:05 得分: 0


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

-----------------------------
就是这个方法,你自己测试一下就知道了......

热点排行