在本文中,我们将带你了解理解Delphi的类(一)-从结构谈起在这篇文章中,我们将为您详细介绍理解Delphi的类(一)-从结构谈起的方方面面,并解答delphi的所有类都是从什么类继承下来的常见的疑
在本文中,我们将带你了解理解 Delphi 的类(一) - 从结构谈起在这篇文章中,我们将为您详细介绍理解 Delphi 的类(一) - 从结构谈起的方方面面,并解答delphi的所有类都是从什么类继承下来的常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的[DELPHI-码农]理解 Delphi 的类(十) - 深入方法[15] - 调用其他单元的函数、创建Delphi IoC.如何禁用Delphi的链接器删除未使用的类、理解 Delphi 的类 (九) - 关于类的向前声明、理解 Delphi 的类 (八) - 关于类的定义。
本文目录一览:- 理解 Delphi 的类(一) - 从结构谈起(delphi的所有类都是从什么类继承下来的)
- [DELPHI-码农]理解 Delphi 的类(十) - 深入方法[15] - 调用其他单元的函数
- 创建Delphi IoC.如何禁用Delphi的链接器删除未使用的类
- 理解 Delphi 的类 (九) - 关于类的向前声明
- 理解 Delphi 的类 (八) - 关于类的定义
理解 Delphi 的类(一) - 从结构谈起(delphi的所有类都是从什么类继承下来的)
总结
以上是小编为你收集整理的理解 Delphi 的类(一) - 从结构谈起全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
[DELPHI-码农]理解 Delphi 的类(十) - 深入方法[15] - 调用其他单元的函数
总结
以上是小编为你收集整理的[DELPHI-码农]理解 Delphi 的类(十) - 深入方法[15] - 调用其他单元的函数全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
创建Delphi IoC.如何禁用Delphi的链接器删除未使用的类
AutoRegister如下所示.
procedure TIocContainer.AutoRegister; var ctx: TRttiContext; rType: TRttiType; attr: TCustomAttribute; &Type: PTypeInfo; begin ctx := TRttiContext.Create; for rType in ctx.GetTypes do Begin for attr in rType.GetAttributes do Begin if TypeInfo(IocSingletonAttribute) = attr.ClassInfo then Begin &Type := IocSingletonAttribute(attr).&Type; RegisterType(&Type,rType.Handle,True); End; End; End; end;
然后我创建一个实现并将IocSingletonAttribute添加到它.看起来像这样
[IocSingleton(TypeInfo(IIocSingleton))] TIocSingleton = class(TInterfacedobject,IIocSingleton) procedure DoSomeWork; end;
所以,现在到程序的实际代码.如果我写下面的代码,IoC不起作用. AutoRegister过程没有选择TIocSingleton.
var Ioc: TIocContainer; Singleton: IIocSingleton; begin Ioc := TIocContainer.Create; try Ioc.AutoRegister; Singleton := Ioc.Resolve<IIocSingleton>(); Singleton.DoSomeWork; finally Ioc.Free; end; end.
但是,如果我编写下面的代码,一切都按预期工作.请注意我是如何声明TIocSingleton类并使用它的.
var Ioc: TIocContainer; Singleton: IIocSingleton; ASingleton: TIocSingleton; begin Ioc := TIocContainer.Create; ASingleton := TIocSingleton.Create; try Ioc.AutoRegister; Singleton := Ioc.Resolve<IIocSingleton>(); Singleton.DoSomeWork; finally Singleton.Free; Ioc.Free; end; end.
基于此,我假设Delphi的编译器链接器在第一个示例中删除了TIocSingleton,因为它从未在应用程序的任何部分中明确使用.所以我的问题是,是否可以为某个类转换编译器的“删除未使用的代码”功能?或者,如果我的问题不是链接器,任何人都可以阐明为什么第二个例子有效而不是第一个?
解决方法
理解 Delphi 的类 (九) - 关于类的向前声明
//例1: 这是正确的
TClassA = class
Field1: string;
Field2: Integer;
end;
TClassB = class
Field1: string;
Field2: Integer;
Field3: TClassA; {字段 Field3 的类型是刚刚新定义的 TClassA 类型}
end;
//例2: 这是错误的, 这里有个顺序问题
TClassA = class
Field1: string;
Field2: Integer;
Field3: TClassB; {字段 Field3 的类型是将要定义的 TClassB 类型}
end;
TClassB = class
Field1: string;
Field2: Integer;
end;
//例3: 解决方案 - 向前声明
TClassB = class; {向前声明}
TClassA = class
Field1: string;
Field2: Integer;
Field3: TClassB;
end;
TClassB = class
Field1: string;
Field2: Integer;
end;
理解 Delphi 的类 (八) - 关于类的定义
//标准语法
TMyClass1 = class(TObject)
end;
//如果是继承自 TObject 可以省略
TMyClass2 = class
end;
//可以实现多个接口; 实现接口时经常用到 TInterfacedObject 类, 它实现了接口的默认方法
TMyClass3 = class(TInterfacedObject, Interface1, Interface2)
end;
//现在 TMyClass4 相当于 TObject 的别名
TMyClass4 = class(TObject);
//用 class abstract 说明抽象类, 但内部必须有抽象方法, 才是真正的抽象类.
TMyClass5 = class abstract(TObject)
procedure Proc; virtual; abstract;
end;
//用 class sealed 定义不可继承的类
TMyClass6 = class sealed(TObject)
//...
end;
//这是定义了一个 TObject 类型的指针; TMyClass 称作 TObject 的类引用或元类
TMyClass = class of TObject;
//类中数据成员的排列顺序一般是: 字段、方法、属性
//访问权限区域的顺序一般是:
无限制区(默认 published)
private
protected
public
published
关于理解 Delphi 的类(一) - 从结构谈起和delphi的所有类都是从什么类继承下来的的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于[DELPHI-码农]理解 Delphi 的类(十) - 深入方法[15] - 调用其他单元的函数、创建Delphi IoC.如何禁用Delphi的链接器删除未使用的类、理解 Delphi 的类 (九) - 关于类的向前声明、理解 Delphi 的类 (八) - 关于类的定义等相关内容,可以在本站寻找。
本文标签: