我在使用對象池後為何有些電腦做中間層而客戶端無法邊接它,程序調試時顯示Object not available,運行時顯示Server not availabl

  • 主题发起人 主题发起人 mydelphi2006
  • 开始时间 开始时间
M

mydelphi2006

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用對象池後為何有些電腦做中間層而客戶端無法邊接它,程序調試時顯示Object not available,運行時顯示Server not available(100分)<br />如題,試了好久,有兩台電腦可以正常使用,但其它電腦卻做不了中間層,請高手指點一二。
 
不知道C++怎么做到,从继承的角度来说,我觉得是不应该这样的!
 
同意楼上的.
 
用不同的接口实现
 
如: A类 ---- B类 ---- C类 (A类是祖先类)
其中有个虚拟方法在A类中就定义了,B类在继承的情况又加入了一些执行语句,我现在C类中想跳过继承B类中的方法,直接继承A类的方法。
在C++中,我可以在C类用 A:funcname();
直接继承A的方法。
请指点DELPHI是否有类似的方法实现,给个例子参考一下,谢谢!
 
那不是乱伦吗。。。
 
哈哈,这也是工作中用到这样的情况啊,所以想解决一下这样的问题,当然可以把A类的方法代码放到C类的方法中不用继承也是可以的,但是我想DELPHI为什么不能做到这样的效果,我想有可能是我学的不到位,所以不知道那种方法吧,只好求助各位大侠了
 
可以做到啊。
可以在A中建立虚方法,然后在C中实现。
如果A中已经实现的方法,只要在C中可见,就可以使用啊:(C as A).function....
 
来自:wwr74, 时间:2006-5-16 16:16:50, ID:3444028
可以做到啊。
可以在A中建立虚方法,然后在C中实现。
如果A中已经实现的方法,只要在C中可见,就可以使用啊:(C as A).function....
这是不行的,就因为是虚方法,所以那样调用还是调用C类的function,那样就会死循环了!
错误信息: Stack overflow
 
不知楼主的意思,a->b->c, 直接 a->c, c 直接从 a 继承不行吗?不要当孙子,直接当儿子吧。
 
用接口能实现
 
To: kaida
因为其它的方法都需要从B类继承,只有那一两个需要直接调用A类的
To: qi_jianzhou
以现有的A->B->C的继承关系如何以接口实现,能否说明白点,先谢了!
 
如果A有实现了,想要调用A的实现,那可以在C的实现里定义一个A类的指针,然后将自己强转成A类调用其函数实现(和C的原理类似),但注意,这样的调用是不安全的,并且这种是对函数的重构
接口也不能实现这种重用,接口是声明没有实现,如果楼主要实现A的实现重用就没办法了
 
例如有这样的代码:
program Project1;
{$APPTYPE CONSOLE}
uses
Windows, SysUtils, Dialogs;
type
TA = class
public
procedure Test;
virtual;
procedure Call;
end;

TB = class(TA)
public
procedure Test;
override;
end;

TC = class(TB)
public
procedure Test;
override;
end;

{ TA }
procedure TA.Call;
begin
Test;
end;

procedure TA.Test;
begin
ShowMessage('A class');
end;

{ TB }
procedure TB.Test;
begin
inherited;
ShowMessage('B class');
end;

{ TC }
procedure TC.Test;
begin
//inherited;
&Icirc;&Ograve;&sup2;&raquo;&Iuml;&euml;&micro;÷&Oacute;&Atilde;&cedil;&cedil;&Agrave;àTB&micro;&Auml;Test·&frac12;·¨&pound;&not;
//TA.Test;
&micro;&laquo;&Icirc;&Ograve;&Ograve;&ordf;&frac14;&Igrave;&sup3;&ETH;TA&micro;&Auml;Test·&frac12;·¨
ShowMessage('C class');
end;

var
c: TC;
begin
{ TODO -oUser -cConsole Main : Insert code here }
c := TC.Create;
c.Call;
c.Free;
end.
 
同样的我以C++是这样实现的:
#include &quot;stdafx.h&quot;
class CA {
public:
virtual void Click();
void Call();
};
void CA::Call() {
Click();
}
void CA::Click() {
printf(&quot;A class/n&quot;);
}
class CB : public CA {
public:
void Click();
};
void CB::Click() {
CA::Click();
printf(&quot;B class/n&quot;);
}
class CC : public CB {
public:
void Click();
};
void CC::Click() {
//CB::Click();
//&Icirc;&Ograve;&sup2;&raquo;&Iuml;&euml;&micro;÷&Oacute;&Atilde;&cedil;&cedil;&Agrave;àCB&micro;&Auml;Click·&frac12;·¨,
CA::Click();
//&Ocirc;&Uacute;&Otilde;&acirc;&Agrave;&iuml;&Icirc;&Ograve;&frac34;&Iacute;&Ouml;±&frac12;&Oacute;&micro;÷&Oacute;&Atilde;&micro;&Auml;CA&Agrave;à&micro;&Auml;·&frac12;·¨, &Igrave;&oslash;&sup1;&yacute;&Aacute;&Euml;CB&Agrave;à&micro;&Auml;·&frac12;·¨
printf(&quot;C class/n&quot;);
}
void main(void) {
CC *c = new CC();
c->Call();
delete c;
}
 
晕啊,怎么乱码了,意思是我不调用B类的,直接调用A类的方法,跳过了B类的方法,请大侠多多指点一下。
 
可以在A中建立虚方法,然后在C中实现
 
To: YYGGQQ
在程序裡我A類,B類,C類都有可能產生實例調用,而產生的實例都有可能會調用同一個方法的,變化在於B類增加了代碼處理,所以A、B、C類同一方法都加有自己的代碼,而C類又用了B類的很多方法,隻是有一兩個方法是不想從B類繼承過來的,所以選用了C類從B類繼承,如裡C類從A類繼承的話,那C類的內容又重復了B類的工作,所以需要這種方法,不知我這樣說是否說得明白?
 
假设 A 类 方法 Proc1, B 类 override 了 A 类的 Proc1。你可以可以在 A 类再建立方法 Proc2。Proc2 直接调用 A 类的 Proc1。这样 C 类的 Proc1 中取消 inherited,直接调用 Proc2 即可。
 
后退
顶部