zoukankan      html  css  js  c++  java
  • C#学习历程(七)[基础知识]

    ---恢复内容开始---

    》》接受用户输入的整数

    Console.readline();接受键盘输入的字符串,如果需要接受整数并输出,则需要字符串的转换。

    一般建议使用Covert类中的方法。比如整数Convert.ToInt32(str);小数Convert.ToDouble(str);

    (但是如果字符串不为数字的话就会报错)

    》》数据转换

    显式转换,当大类型数据(大盒子)向小类型数据(小盒子)转换时,需要进行显式转换反之则是系统自动隐式转换。

    可以直接在前面加(类型),例如byte mybyte = (byte)myint。

    也可以使用Convert对应的方法进行转换。(这个就要注意类型转换不匹配造成的错误)

    》》复杂的变量类型

    枚举

    枚举是某类型的取值范围。

    先定义枚举类型,再声明此枚举类型的声明,再进行对应的赋值。

    而且枚举类型的定义一般是在namespace下面的,当然class下面也可以。

    比如:

    enum GameState
    /*在名称后面加上“:byte”可以修改枚举的默认类型,默认是int,可节约内存*/
    {     Pause; Failed; Success; Start;
    /*默认是0开始,第一个修改,后面也是依次递增(若用整型数字表示,要记得使用显式转换)*/
    /*定义四种游戏的状态*/
    /*可以使用“=”来自行改变默认值*/ } GameState state = GameState.start;
    int num = (int)state; /*声明一个变量state*/
    /*然后使用声明的变量,来进行接下来的代码编写*/

     结构体

    几个类型的集合。

    结构体的定义同样一般写在namespace下面。

    struct Position{
        
         int x = 3;
         int y;
         int z;         
    }
    Position realPosition;
    realPosition.x = 3; /*多个变量(类型)的集合*/
    /*当时使用结构体声明变量的时候,此变量就包含结构体中的所有变量*/
    /*然后直接使用“.变量名”直接使用,使数据更加的清晰*/

    数组

    数组前面已经谢过了,具体的定义和使用方法,就此略过。

    》》函数中的参数数组

    static int plus(params int[] array)//params 表示是一个int型的【参数数组】
    {
        int sum= 0;
        for(int i = 0; i<array.Length;i++) {
             sum += array[i]
        }
        return sum;       
    
    }
    
    static int plus(int[] array)//参数是一个未定义大小的【数组】
    {
        int sum= 0;
        for(int i = 0; i<array.Length;i++) {
             sum += array[i]
        }
        return sum;       
    }
    
    
    /*****在main函数中调用的时候*******/
    
    int sum1 = plus(33,22,11,44,55,77)
    /*自己输入任意符合类型的数字,编译器自动根据输入,组合成一个数组*/
    
    int sum2 = plus(new int[]{33,55,44,22,11})
    /*需要手动定义一个数组,且参数固定,无法像参数数组一样更改*/
    

    》》委托的特点

      委托的使用分两步:

      先定义

      然后声明(变量)

      其中枚举,结构体的使用都分为定义和声明。而整数类型,字符串类型,数组类型的定义已经在CLR中完成,直接声明即可。

      类型的定义放在namespace下方。

      委托的定义类似一个没有函数体的函数,且定义委托需要delegate关键字

    namespace _053_委托的使用 {
        public delegate double MyDelegate(double param1, double param2);
        class Program {
            static double Multiply(double param1, double param2)
            {
                return param1/param2;
            }
            static void Main(string[] args)
            {
                MyDelegate de;//利用我们定义的委托类型声明了一个新的变量 
                de = Multiply;//当我们给一个委托的变量赋值的时候,返回值跟参数列表必须一样,否则无法赋值
                Console.WriteLine(de(2.0, 34.1));
                Console.ReadKey();
            }
        }
    }
    
    • 委托类似于 C++ 函数指针,但它们是类型安全的。
    • 委托允许将方法作为参数进行传递--》允许将方法带入另一个方法。
    • 委托可用于定义回调方法。
    • 委托可以链接在一起;例如,可以对一个事件调用多个方法。
    • 方法不必与委托签名完全匹配。
    • 事件就是一种特殊的委托。

      

      字段总结:

        Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型

      Func可以接受0个至16个传入参数,必须具有返回值

      Action可以接受0个至16个传入参数,无返回值

      Predicate只能接受一个传入参数,返回值为bool类型

      所有的委托(Delegate)都派生自 System.Delegate 类。

      一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。(??)

     

    》》重写和重载

    1、父类中有方法a,添加virtua修饰符可声明为虚方法,在子类中可以用override声明后重写方法a。【重写】

    2、父类中有方法a,在子类中可以有new修饰符声明后隐藏父类方法。【重载】

    3、类中有方法a(int  int),以及b(string string),根据后面调用方法时参数的不同,则对应的方法也不同。【重载】

    子类重写方法后,对于子类的任何实例,父类的原方法a都已经不存在。

    子类隐藏父类方法后,父类的原方法仍然存在,当子类的实例的类型转为父类时,调用的方法a即为原来的方法。

     

  • 相关阅读:
    jProfiler远程连接Linux监控jvm的运行状态
    Linux性能监控分析命令(五)—free命令介绍
    Linux性能监控分析命令(三)—iostat命令介绍
    Python编程练习题学习汇总
    OSPF与ACL综合应用实验
    ACL基础知识点总结
    NAT基础知识点
    VLAN实验五:利用三层交换机实现VLAN间路由
    VLAN实验四:利用单臂路由实现VLAN间路由
    VLAN实验三:理解Hybrid接口
  • 原文地址:https://www.cnblogs.com/echo-web/p/9705557.html
Copyright © 2011-2022 走看看