delphioop方法
如果可能的话,我如何在另一个类过程中更改一个类中的值。例如:delphioop方法,oop,delphi,Oop,Delphi,如果可能的话,我如何在另一个类过程中更改一个类中的值。例如: Class1 : Class Private Random : Integer; public end; Class2 : Class Private Public Procedure DoSomething(); end; Procedure Class2.DoSomething(); Begin //Do Something If ... then Change Random to ... end; 视情况而定。首先必须考虑
Class1 : Class
Private
Random : Integer;
public
end;
Class2 : Class
Private
Public
Procedure DoSomething();
end;
Procedure Class2.DoSomething();
Begin
//Do Something
If ... then
Change Random to ...
end;
视情况而定。首先必须考虑可见性被分离的原因。私有方法用于类内,而公共方法用于类外 在您的特定示例中,您没有引用类。相反,我将使用您的示例演示以下内容:
type
TMyObject = class(TObject)
private
FNumber: Integer;
function GetNumber: Integer;
procedure SetNumber(Input: Integer)
public
property Number: Integer read GetNumber write SetNumber;
end;
function TMyObject.GetNumber: Integer;
begin
Result := FNumber;
end;
procedure TMyObject.SetNumber(Input: Integer);
begin
FNumber := Input;
end;
如您所见,我添加了一个名为Number的属性,它使用GetNumber获取值,并使用SetNumber分配值。这种方法的使用几乎总是以这种方式与属性的使用相结合
回到你最初的问题上来,正如我所说的,这要看情况而定。例如,您的属性设置程序可能会执行一些附加代码,而不仅仅是赋值。在这种情况下,您可能需要在类中通过其私有FNumber字段设置此值,这样就不会调用额外的setter代码
简而言之,答案是否定的。从类中通过getter和setter访问私有成员并不是绝对必要的。然而,从课外来说,是的,这是必要的
另一方面,您还可以将该成员声明为严格私有,这将强制该类成员只能从类本身中看到,而不能从同一单元中的任何其他位置看到
关于类成员的可见性。严格私有和严格保护
declarationsection是在D2007中引入的。在会议上宣布的成员
严格的私有部分不能从其他类访问,即使在
相同的单位,如本例所示:
type
TMyClass = class
private
MyPrivateField : Integer;
strict private
MyStrictPrivateField : Integer;
public
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
MyClass : TMyClass;
begin
MyClass := TMyClass.Create;
MyClass.MyPrivateField := 0; // compiles ok
MyClass.MyStrictPrivateField := 1; // does not compile
// fails with E2361, "Cannot access private symbol TMyClass.MyStrictPrivateField
end;
请注意,这不仅无法编译,而且至少在西雅图,
MyStrictPrivate字段未显示在的自动完成列表中
与MyPrivateField不同,在FormCreate中具有插入点的TMyClass,
确实如此。文档中对此进行了解释。您不了解其中的哪一部分?可能您还没有阅读有关代码的文档,也没有说明您所询问的任何内容。您可能在谈论类方法及其可见性,但您的代码与类完全无关。还有,它甚至不是有效的语法。@DavidHeffernan我不懂的东西更具体,但我想如果我学会了基本知识,它会有所帮助。我真正想知道的是,如果我有两个类,c1和c1,我在c1里面。举个例子,我怎么能改变c2中的值。我能这样做吗?这对我来说毫无意义,你是说从单元之外而不是从课堂之外:?Delphi在同一个单元中有一个私有说明符访问孔,它可以由严格的私有说明符来修复,因为它不是必需的。您可以从同一单元访问不同类的私有字段,即使是在最新版本的Delphi中,我打赌,不是吗?@Victoria这就是我参考OP文档了解更多信息的原因。当然,这里没有必要完全背诵整个文档。是的,私人成员可以通过设计从同一个单元中访问,但这不是好的做法。当然。我同意从同一单元中的另一个类访问字段是没有好处的。这种欺骗仍然很有用,例如,对于隐藏子组件(如网格头)的方法,这些子组件应该对用户保持隐藏,例如CalcHeaderRect方法,这些方法只从网格调用,而不是由用户调用。O。。K有人能解释一下为什么他们把赞成票变成反对票吗?