• F#学习:类型的定义和使用语法


    代码:

    // 定义一个类
    type Person = 
        // 属性定义
        { Name: string; Age: int }
    
        // 静态属性
        static member Tom = { Name = "Tom"; Age = 20 }
    
        // 静态方法
        static member GetPerson(name, age) = { Name = name; Age = age }
    
        // 成员方法
        member s.SayHi() = printfn "Hi there, I'm %s and I'm %d years old." s.Name s.Age
    
    // 实例化
    let jack = { Name = "Jack"; Age = 30 }
    
    let tom = Person.Tom
    
    // 调用成员方法
    jack.SayHi()
    tom.SayHi()
    
    // 访问属性
    printfn "%s" jack.Name
    printfn "%d" tom.Age

    输出:

    Hi there, I'm Jack and I'm 30 years old.
    Hi there, I'm Tom and I'm 20 years old.
    Jack
    20

    type Person =
      {Name: string;
       Age: int;}
      with
        member SayHi : unit -> unit
        static member GetPerson : name:string * age:int -> Person
        static member Tom : Person
      end
    val jack : Person = {Name = "Jack";
                         Age = 30;}
    val tom : Person = {Name = "Tom";
                        Age = 20;}

    用 Reflector 反编译生成的 dll, 代码如下:

    [Serializable, CompilationMapping(SourceConstructFlags.RecordType)]
    public sealed class Person : IEquatable<Program.Person>, IStructuralEquatable, IComparable<Program.Person>, IComparable, IStructuralComparable
    {
        // Fields
        [DebuggerBrowsable(DebuggerBrowsableState.Never)]
        internal int Age@;
        [DebuggerBrowsable(DebuggerBrowsableState.Never)]
        internal string Name@;
    
        // Methods
        public Person(string name, int age);
        [CompilerGenerated]
        public sealed override int CompareTo(Program.Person obj);
        [CompilerGenerated]
        public sealed override int CompareTo(object obj);
        [CompilerGenerated]
        public sealed override int CompareTo(object obj, IComparer comp);
        [CompilerGenerated]
        public sealed override bool Equals(Program.Person obj);
        [CompilerGenerated]
        public sealed override bool Equals(object obj);
        [CompilerGenerated]
        public sealed override bool Equals(object obj, IEqualityComparer comp);
        [CompilerGenerated]
        public sealed override int GetHashCode();
        [CompilerGenerated]
        public sealed override int GetHashCode(IEqualityComparer comp);
        public static Program.Person GetPerson(string name, int age);
        public void SayHi();
    
        // Properties
        [CompilationMapping(SourceConstructFlags.Field, 1)]
        public int Age { get; }
        [CompilationMapping(SourceConstructFlags.Field, 0)]
        public string Name { get; }
        public static Program.Person Tom { get; }
    }
    
     
    
     
  • 相关阅读:
    How to create Ubuntu Image with Linaro Image Tools
    linux little tool
    Firefly-RK3288
    tensorflow 出现KeyError: 'tulips\8689672277_b289909f97_n.jpg'报错
    开发中涉及的框架与工具
    这三年被分布式坑惨了,曝光十大坑 【转载】
    C#动态编译及执行代码
    cron表达式可视化编辑页面
    AVPacket相关函数介绍
    ffmpeg 重要函数介绍
  • 原文地址:https://www.cnblogs.com/RChen/p/1786247.html
Copyright © 2020-2023  润新知