• lua&C#学习整理


    1.Lua中有8个基本类型分别为:nil、boolean、number、string、userdata、function、thread和table。

    2.pairs 和 ipairs区别

       pairs: 迭代 table,可以遍历表中所有的 key 可以返回 nil

       ipairs: 迭代数组,不能返回 nil,如果遇到 nil 则退出

    3.结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据

    4.C# 中的结构有以下特点:

    • 结构可带有方法、字段、索引、属性、运算符方法和事件。
    • 结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义默认的构造函数。默认的构造函数是自动定义的,且不能被改变。
    • 与类不同,结构不能继承其他的结构或类。
    • 结构不能作为其他结构或类的基础结构。
    • 结构可实现一个或多个接口。
    • 结构成员不能指定为 abstract、virtual 或 protected。
    • 当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
    • 如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。

    5.类和结构有以下几个基本的不同点:

    • 类是引用类型,结构是类型。
    • 结构不支持继承。
    • 结构不能声明默认的构造函数 

    6.枚举是值数据类型

    7.类的成员变量是对象的属性(从设计角度),且它们保持私有来实现封装。这些变量只能使用公共成员函数来访问

    例如:

    class Box
        {
           private double length;   // 长度
           public void setLength( double len )
           {
                length = len;
           }

    8.类的构造函数:当创建类的新对象时执行。构造函数的名称与类的名称完全相同,它没有任何返回类型。

    9.带参数的构造函数,可以在创建对象的同时给对象赋初始值

    例如:

    class Line
       {
          private double length;   // 线条的长度
          public Line(double len)  // 参数化构造函数
          {
             length = len;
          }

    10.声明一个类成员为静态时,意味着无论有多少个类的对象被创建,只会有一个该静态成员的副本。

    例如:

    class StaticVar
        {
           public static int num;
            public void count()
            {
                num++;
            }
            public int getNum()
            {
                return num;
            }
        }
        class StaticTester
        {
            static void Main(string[] args)
            {
                StaticVar s1 = new StaticVar();
                StaticVar s2 = new StaticVar();
                s1.count();
                s1.count();
                s1.count();
                s2.count();
                s2.count();
                s2.count();         
                Console.WriteLine("s1 的变量 num: {0}", s1.getNum());
                Console.WriteLine("s2 的变量 num: {0}", s2.getNum());
            }
        }
    View Code

    11. static函数只能访问静态变量

    12.C# 类不支持多重继承。接口可以实现多重继承

    13.多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。

          C# 提供了两种技术来实现静态多态性。分别为:

    • 函数重载
    • 运算符重载

    14.抽象类包含抽象方法,抽象方法可被派生类实现

    例如:

    abstract class Shape
       {
          public abstract int area();
       }

     class Rectangle:  Shape
       {
          private int length;
          private int width;
          public Rectangle( int a=0, int b=0)
          {
             length = a;
             width = b;
          }
          public override int area ()
          {                   
             return (width * length); 
          }
       }

    15.抽象类的一些规则:

    • 您不能创建一个抽象类的实例。
    • 您不能在一个抽象类外部声明一个抽象方法。
    • 通过在类定义前面放置关键字 sealed,可以将类声明为密封类。当一个类被声明为 sealed 时,它不能被继承。抽象类不能被声明为 sealed。

    16.动态多态性是通过抽象类和虚方法实现的。当有一个定义在类中的函数需要在继承类中实现时,可以使用虚方法

    例如:
    class Shape 
       {
          protected int width, height;
          public Shape( int a=0, int b=0)
          {
             width = a;
             height = b;
          }
          public virtual int area()
          {
             Console.WriteLine("父类的面积:");
             return 0;
          }
       }
       class Rectangle: Shape
       {
          public Rectangle( int a=0, int b=0): base(a, b)
          {
    
          }
          public override int area ()
          {
             Console.WriteLine("Rectangle 类的面积:");
             return (width * height); 
          }
       }
    View Code

    17.virtual 和 abstract

    virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义。

    •  1.virtual修饰的方法必须有实现(哪怕是仅仅添加一对大括号),而abstract修饰的方法一定不能实现。
    •  2.virtual可以被子类重写,而abstract必须被子类重写。
    •  3.如果类成员被abstract修饰,则该类前必须添加abstract,因为只有抽象类才可以有抽象方法。
    •  4.无法创建abstract类的实例,只能被继承无法实例化。

    18.接口定义了属性、方法和事件,接口只包含了成员的声明,成员的定义是派生类的责任。

    19.继承接口后,我们需要实现接口的方法, 方法名必须与接口定义的方法名一致。如果一个接口继承其他接口,那么实现类或结构就需要实现所有接口(该接口和继承的接口)的成员。

    20.C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。

    委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。

    例如:

    using System;
    delegate int NumberChanger(int n);
    namespace DelegateAppl
    {
       class TestDelegate
       {
          static int num = 10;
          public static int AddNum(int p)
          {
             num += p;
             return num;
          }
          static void Main(string[] args)
          {
             // 创建委托实例
             NumberChanger nc1 = new NumberChanger(AddNum);
             // 使用委托对象调用方法
             nc1(25);//10+25
          }
       }
    }
    View Code

     21.事件

    using System;
    namespace SimpleEvent
    {
      using System;
      /***********发布器类***********/
      public class EventTest
      {
        private int value;
    
        public delegate void NumManipulationHandler();
    
    
        public event NumManipulationHandler ChangeNum;
    
        protected virtual void OnNumChanged()
        {
          if ( ChangeNum != null )
          {
            ChangeNum(); /* 事件被触发 */
          }else {
            Console.WriteLine( "event not fire" );
            Console.ReadKey(); /* 回车继续 */
          }
        }
    }
    View Code
  • 相关阅读:
    .NET5微服务示例-Ocelot网关
    .NET5微服务示例-Polly熔断与降级
    .NET5微服务示例-Consul注册中心
    .NET下使用ELK日志中心
    [ 题解 ] [ 数学 ] [ JZOJ5809 ] 数羊
    [ 题解 ] [ 数学 ] 函数 (sequence) (欧拉函数)
    [ 题解 ] [ JZOJ5777 ] 小 x 玩游戏
    更换谷歌浏览器视频输入源
    axios 封装及 API 接口管理
    小程序代码压缩实践
  • 原文地址:https://www.cnblogs.com/shirln/p/8458945.html
Copyright © 2020-2023  润新知