David,
Cita:
Empezado por dec
...¿se pueden usar métodos de una clase sin instanciarla y sin que dichos métodos estén declarados como "de clase"?...
|
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
TC1 = Object
public
MsgUser : String;
function Calculate(N1, N2 : Double) : Double;
end;
TC2 = class
public
MsgUser : String;
class function Calculate1(N1, N2 : Double) : Double;
function Calculate2(N1, N2 : Double) : Double;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TC1.Calculate(N1, N2: Double): Double;
begin
ShowMessage(Format('Calculate = %n (+,-,*,/) %n',[N1,N2]));
end;
class function TC2.Calculate1(N1, N2: Double): Double;
begin
ShowMessage(Format('Calculate = %n (+,-,*,/) %n',[N1,N2]));
end;
function TC2.Calculate2(N1, N2: Double): Double;
begin
ShowMessage(Format('Calculate = %n (+,-,*,/) %n',[N1,N2]));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
C1 : TC1;
C2 : TC2;
begin
C1.MsgUser := 'Tipo Object = No requiere ser Instanciado para el uso de Variables y Métodos';
ShowMessage(C1.MsgUser);
C1.Calculate(7.1,3.14);
ShowMessage('Método de Clase = No requiere ser Instanciada la Clase para su uso');
TC2.Calculate1(7.1,3.14);
C2 := TC2.Create;
C2.MsgUser := 'Método y Variable de Instancia = Requiere ser Instanciada la Clase para su uso';
ShowMessage(C2.MsgUser);
C2.Calculate2(7.1,3.14);
C2.Free;
end;
end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32,
ejemplifica el uso del tipo Object y de Métodos de Clase y de Instancia.
Nota: El tipo object permite instanciar objetos
sin usar el método Create y es muy util para implementaciones de tipos abstractos simples, para desarrollos formales orientados a objetos
se debe usar el tipo Class.
Revisa esta información:
Espero sea útil
Nelson.