类型与泛型标记

uses System.TypInfo;

// Sync with compiler internals
  TTypeKind = (tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat,
    tkString, tkSet, tkClass, tkMethod, tkWChar, tkLString, tkWString,
    tkVariant, tkArray, tkRecord, tkInterface, tkInt64, tkDynArray, tkUString,
    tkClassRef, tkPointer, tkProcedure {, tkMRecord});

type
{$IFDEF NEXTGEN}
  TSymbolName = Byte;
{$ELSE  NEXTGEN}
  TSymbolNameBase = string[255];
  TSymbolName = type TSymbolNameBase;
{$ENDIF NEXTGEN}

TTypeInfoFieldAccessor = record
  strict private                   //静态?私有
    FData: PByte;
  public
    procedure SetData(const Data: PByte); inline;
    class operator Equal(const Left, Right: TTypeInfoFieldAccessor): Boolean; inline;
    function UTF8Length: integer; inline;
    function ToString: string;
{$IFNDEF NEXTGEN}
    function ToShortUTF8String: ShortString; inline;
{$ENDIF !NEXTGEN}
    function ToByteArray: TBytes;
    function Tail: PByte; inline;
  end;

-------------------TypeInfo (T)-------------------

PTypeInfo = ^TTypeInfo;
  TTypeInfo = record
    Kind: TTypeKind;
    Name: TSymbolName;
    function NameFld: TTypeInfoFieldAccessor; inline;
   {TypeData: TTypeData}
    function TypeData: PTypeData; inline;
  end;

function TSampleClass<T>.GetDataName: string;
var
 Kind: TTypeKind;
begin
  Result := GetTypeName (TypeInfo (T));
  Kind := PTypeInfo(TypeInfo(T))^.Kind;
  case Kind of
    tkInteger: ShowMessage(‘I‘);
    tkFloat: ShowMessage(‘F‘);
    tkString,tkUString: ShowMessage(‘S‘);
    tkChar:   ShowMessage(‘C‘);
    tkClass:  ShowMessage(‘Class‘);
    else ShowMessage(Result);
  end;
end;

时间: 2024-09-27 03:15:06

类型与泛型标记的相关文章

读书笔记 C# Type类型与泛型有关的某些属性浅析

IsGenericType 如果类型为泛型,则返回 true. GetGenericArguments 返回 Type 对象数组,这些对象表示为构造类型提供的类型变量,或泛型类型定义的类型参数.如果是MyList<int,Person> ,则返回int和Person类型的数组,如同Type[] tpyes={typeof(int),typeof(Person)},Type数组中任一参数的IsGenericParameter为false;如果是MyList<,>或,则返回T和U类型的

对比两个同类型的泛型集合并返回差异泛型集合 ——两个List&lt;类名&gt;的比较

1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam name="T">泛型类型</typeparam> 5: /// <param name="newModel">修改后的数据集合</param> 6: /// <param name="oldModel"&g

java5核心基础之泛型(3)-泛型作用于编译阶段-怎样将String对象传入Integer类型的泛型对象中?

泛型作用于编译阶段: 泛型是作用于编译阶段,在编译阶段控制类型,以确保在编写代码的时候仅仅能传入指定类型数据到泛型集合对象中去. 怎样验证呢,贴代码例如以下: package highBasic.generic; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; public class StringAddToGeneri

java5核心基础之泛型(3)-泛型作用于编译阶段-如何将String对象传入Integer类型的泛型对象中?

泛型作用于编译阶段: 泛型是作用于编译阶段,在编译阶段控制类型,以确保在编写代码的时候只能传入指定类型数据到泛型集合对象中去.如何验证呢,贴代码如下: package highBasic.generic; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; public class StringAddToGenericInt

第17章 枚举类型与泛型

1.枚举类型 JDK1.5中新增了枚举类型与泛型. 枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中,此外,它还提供了安全检查功能. 枚举类型本质上还是以类的形式存在. enum是定义枚举类型的关键字. 例如:在项目中创建Constants接口,在接口中定义敞亮的常规方式: public interface Constants{ public static final int Constants_A=1; public static final int Constants_B=12;

类型参数化-泛型

中间因为比较忙,空了那么多天,都感觉有点罪过了.话不多说,这一篇主要是要讲C#2.0提出的一个新特性,那就是泛型.(现在都C#6.0了.囧囧) 1.什么是泛型? C#1.0中的委托特性使方法可作为其他方法的参数来传递,而C#2.0中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的方法实现.从字面上来的意思来讲,泛型代表的就是“通用类型”,它可以代替任意的数据类型,使类型参数化,从而达到只实现一个方法就可以操作多种数据类型的目的,将实现行为与方法操作的数据类型分离,实现了代

在JAVA中返回类型使用泛型T和Object有什么区别?

最近在读jackson源码的时候发现有段代码返回类型写的是<T> T,而我自己一般写的是Object.上网搜了下这个语法糖,在stackoverflow上找到一个比较简单易懂的解释,搬运过来(https://stackoverflow.com/questions/5207115/java-generics-t-vs-object) 问题:下面2个方法的声明有何不同 public Object doSomething(Object obj) {....} public <T> T d

WPF(4)类型转换器和标记扩展

介绍 之前讨论了WPF的基础架构,然后逐步开始学习布局面板,转换,介绍了不同的控件,容器,UI转换等.在这篇文章中,我将讨论每个创建XAML应用前的开发人员应该了解的关于XAML最重要的东西. 标记扩展是一种对XAML的扩展,你可以用来对基于XAML的程序应用自定义的规则.在你的设计中,你如果有任何的想对你的程序施加的自定义行为,你都可以使用标记扩展来实现.这里我们将讨论你可以怎样使用标记扩展对XAML生成自定义的行为. XAML或者说可扩展应用程序标记语言实际上是一种定义了特殊架构的XML格式

函子(Monad)新解:函子定义了一个类型(泛型)和建立在这个类型上的一组运算符

这组运算符和代数中的运算加减乘除运算符一样,符合一定的定律:结合律.(交换律)等: 函数式编程的核心(底层支持)就是这些类型和运算符的定义. 函子就是定义这些类型和运算符的(). 运算符通常为单目运算??运算符的被操作数是(高阶)数据,操作数是配置函数,操作本身是高阶函数: 本质是:结合函数式特点,对运算规则进行了重新的定义. 原文地址:https://www.cnblogs.com/feng9exe/p/10184138.html