Delphi 为什么我的孩子班没有';是否从父类继承所有方法?
如果两个类都放在一个单元中-没有问题,子类从父类继承私有方法,但是如果它们位于不同的单元中,则该类只能访问公共方法。为什么 子类无法访问私有方法,因为它们位于不同的单元中 我如何避免这种情况?在我的例子中,我有3个子类,如果我把它们都放在父类的单元中,结果会非常大 如何使子类以不同的单位从父类继承私有方法 谢谢大家! 你应该制作它们,而不是 像这样Delphi 为什么我的孩子班没有';是否从父类继承所有方法?,delphi,class,Delphi,Class,如果两个类都放在一个单元中-没有问题,子类从父类继承私有方法,但是如果它们位于不同的单元中,则该类只能访问公共方法。为什么 子类无法访问私有方法,因为它们位于不同的单元中 我如何避免这种情况?在我的例子中,我有3个子类,如果我把它们都放在父类的单元中,结果会非常大 如何使子类以不同的单位从父类继承私有方法 谢谢大家! 你应该制作它们,而不是 像这样 type TMyClass = class(TObject) Private procedure OnlyAccessedViaThisCl
type
TMyClass = class(TObject)
Private
procedure OnlyAccessedViaThisClass;
Protected
procedure OnlyAccessedViaThisClassOrSubClasses;
Public
procedure AccessedByAnyone;
end;
你应该做,而不是
像这样
type
TMyClass = class(TObject)
Private
procedure OnlyAccessedViaThisClass;
Protected
procedure OnlyAccessedViaThisClassOrSubClasses;
Public
procedure AccessedByAnyone;
end;
私有方法是(单元)私有的。您需要的是一个受保护的方法。从基类继承的任何类都可以访问受保护的方法,即使它们位于不同的单元中。用户代码无法访问它们(除非他从类继承)
#
#
私有方法是(单元)私有的。您需要的是一个受保护的方法。从基类继承的任何类都可以访问受保护的方法,即使它们位于不同的单元中。用户代码无法访问它们(除非他从类继承)
#
#
您的类无法访问这些方法,因为它们是祖先类的私有方法。您需要阅读有关公共、私有和受保护可见性的帮助文件。如果需要在子代中使用这些方法,请重新编写类,以保护这些方法。您的类无法访问这些方法,因为它们是祖先类的私有方法。您需要阅读有关公共、私有和受保护可见性的帮助文件。如果需要在子代中使用这些方法,请对类进行返工,以保护这些方法。这是类方法范围的遗留问题。严格私有的方法永远不应该从其他类中可见,但是Borland以他们的智慧在同一个单元中实现了这一点,可能是为了与前向声明的兼容性。随后,创建了许多利用此功能的代码。为了实现这一点,Delphi现在引入了严格的PRIVATE,它可以在不破坏现有代码的情况下使事情始终保持原样。
Bri这是类方法范围的遗留问题。严格私有的方法永远不应该从其他类中可见,但是Borland以他们的智慧在同一个单元中实现了这一点,可能是为了与前向声明的兼容性。随后,创建了许多利用此功能的代码。为了实现这一点,Delphi现在引入了严格的PRIVATE,它可以在不破坏现有代码的情况下使事情始终保持原样。
Bri从Delphi 2006开始,还有一个严格的修饰符(如strict private)。使用这个修饰符,像C++一样的私有/保护工作(严格的私有-没有外部类可以访问该方法,严格保护-只有类和子类可以访问该方法)。托拜厄斯,它是Delphi 2005,不是2006年开始Delphi 2006,也有严格的修饰符(像严格的私有)。使用这个修饰符,像C++一样的私有/保护工作(严格的私有-没有外部类可以访问该方法,严格保护-只有类和子类可以访问该方法)。托拜厄斯,它是Delphi 2005,不是2006。
unit B;
interface
uses
A;
type
TDerived = class(TBase)
public
procedure Test;
end;
implementation
procedure TDerived.Test;
begin
// PrivateTest; // compile error
ProtectedTest; // accepted by the compiler
end;
end.
unit C;
interface
uses
A, B;
implementation
var
Base: TBase;
Derived: TDerived;
initialization
Base := TBase.Create;
Derived := TDerived.Create;
// Base.PrivateTest; // compile error
// Base.ProtectedTest; // compile error
// Derived.PrivateTest; // compile error
// Derived.ProtectedTest; // compile error
Derived.Test; // accepted by the compiler
Derived.Free;
Base.Free;
end;