zoukankan      html  css  js  c++  java
  • 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; }
    }
    
     
    
     
  • 相关阅读:
    Git学习-创建版本库
    使用Vim编辑器,如何退出
    设置既定目录的命令提示符
    字符数组和字符串
    一波杂乱的分享
    全国软件设计大赛C/C++语言练习
    HDU 1720、1062、2104、1064、2734、1170、1197、2629
    hdu 2000-2010 ACM
    HDU——算法练习1000 1089-1096
    爬虫学习笔记之为什么要设置超时时间,怎么设置(使用selenium)
  • 原文地址:https://www.cnblogs.com/RChen/p/1786247.html
Copyright © 2011-2022 走看看