CSharp学习笔记一

  1. 函数参数
    方法中的参数除了定义数据类型外,还可以定义引用参数和输出参数。引用参数使用ref关键字定义,输出参数使用out关键字定义。

    // 引用输入
    public bool Judge(ref int num)
    {
    	if(num % 5 ==  0)
    	{
    		return true;
    	}
    	return false;
    }
    
    int a=20;
    // 在调用带有引用参数的方法时,实际参数必须是一个变量,并且在传值时必须加上 ref 关键字
    bool result = Judge(ref a);
    
    
    // 参数输出
    public void Judge(int num, out bool result)
    {
    	if(num % 5 == 0)
    	{
    		result = true;
    	}
    	else
    	{
    		result = false;
    	}
    }
    bool res;
    // 在使用输出参数时,必须在方法操作结束前为带输出参数的形式参数赋值
    Judge(20, out res);
    
    
    
  2. Lambda 表达式
    如果在方法定义中定义了返回值类型,在表达式中不必使用return,直接使用=>,但是=>只能用在方法中只有一条语句的情况下。

    public int Add(int a, int b) => a+b;
    
  3. 控制台打印

    Console.WriteLine("函数返回值为:" + res);
    DateTime dt = DateTime.Now;
    Console.WriteLine("当前日期为:{0}", dt);
    Console.WriteLine("当前时本月的第{0}天", dt.Day);
    
  4. 嵌套类
    如果在其他类中调用嵌套类的成员,需要使用“外部类.嵌套类”的方式创建嵌套类的对象,从而通过嵌套类的对象调用其成员。

    class OuterClass
    {
        public class InnerClass
        {
            public string CardId { get; set; }
            public string Password { get; set; }
            public void PrintMsg()
            {
                Console.WriteLine("卡号为:" + CardId);
                Console.WriteLine("密码为:" + Password);
            }
        }
    }
    // 函数调用
    class Program
    {
        static void Main(string[] args)
        {
            OuterClass.InnerClass outInner = new OuterClass.InnerClass();
            outInner.CardId = "622211100";
            outInner.Password = "123456";
            outInner.PrintMsg();
        }
    }
    
  5. DateTime类使用

    // 方法说明
    Now							//获取当前时间
    Date						//获取实例的日期部分
    Day							//获取该实例所表示的日期是一个月的第几天
    DayOfWeek					//获取该实例所表示的日期是一周的星期几
    DayOfYear					//获取该实例所表示的日期是一年的第几天
    Add(Timespan value)			//在指定的日期实例上添加时间间隔值 value
    AddDays(double value)		//在指定的日期实例上添加指定天数 value
    AddHours(double value)		//在指定的日期实例上添加指定的小时数 value
    AddMinutes(double value)	//在指定的日期实例上添加指定的分钟数 value
    AddSeconds(double value)	//在指定的日期实例上添加指定的秒数 value
    AddMonths(int value)		//在指定的日期实例上添加指定的月份 value
    AddYears (int value)		//在指定的日期实例上添加指定的年份 value
    	
    DateTime dt = DateTime.Now;
    Console.WriteLine("当前日期为:{0}", dt);
    Console.WriteLine("当前时本月的第{0}天", dt.Day);
    Console.WriteLine("当前是:{0}", dt.DayOfWeek);
    Console.WriteLine("当前是本年度第{0}天", dt.DayOfYear);
    Console.WriteLine("30 天后的日期是{0}", dt.AddDays(30));
    
  6. string类使用
    IndexOf 方法得到的是指定字符串在原字符串中第一次出现的位置;
    LastlndexOf 方法得到的是指定字符串在查找的字符串中最后一次出现的位置。
    指定的字符串在查找的字符串中不存在,函数结果都为 -1

  7. 类型转换

  • Parse 方法用于将字符串类型转换成任意类型

    int num1 = int.Parse(Console.ReadLine());
    
  • Convert 能将任意数据类型的值转换成任意数据类型,前提是不要超出指定数据类型的范围。

    float num1 = 82.26f;
    int integer;
    string str;
    integer = Convert.ToInt32(num1);
    str = Convert.ToString(num1);
    
  • 正则表达式
    正则表达式主要用来验证字符串的值是否满足一定的规则

  1. 数组

    double[,] points = { { 90, 80 }, { 100, 89 }, { 88.5, 86 } };
    // 遍历多维数组元素时使用 GetLength(维度) 方法能获取多维数组中每一维的元素
    for(int i = 0; i < points.GetLength(0); i++)
    {
        Console.WriteLine("第" + (i + 1) + "个学生成绩:");
        for(int j = 0; j < points.GetLength(1); j++)
        {
            Console.Write(points[i, j] + " ");
        }
            Console.WriteLine();
    }
    
    
    //使用foreach可以使数组循环变得很简单
    double[] points = { 80, 88, 86, 90, 75.5 };
    double sum = 0;
    double avg = 0;
    foreach(double point in points)
    {
        sum = sum + point;
    }
    
    

    常用方法:
    Clear()—清空数组中元素
    Sort()—冒泡排序
    Reverse()—逆序排列
    IndexOf()—返回某个元素第一次出现的位置
    LastIndexOf()—返回某个元素最后一次出现的位置

  2. get和set函数

      public double Price
    {
        get
        {
            return price;
        }
        set
        {
         	if(value >= 0)
        	{
             	price = value;
         	}
         	else
         	{
             	price = 0;
         	}
        }
    }
    // 调用
    Price p = new Price();
    p.price = 100;
    
  3. Equals函数-判断两个对象是否相等

    Equals (object ol, object o2); //静态方法
    Equals (object o); //非静态方法
    
  4. 继承

  • 子类如果需要调用父类中的成员,可以借助base关键字完成,base代表父类中的对象

  • 重写
    子类重写父类中的方法后能改变方法体中的内容,但是方法的定义不能改变(包括参数列表)。父类函数关键字virtual,子类函数关键字override ;如果父类使用关键字virtual,子类不需重写该函数,则使用关键字new修饰。

    public virtual void print();	// 父类
    public new void print();		// 函数隐藏
    public override void print();	// 函数重写
    
  • 方法隐藏和重写区别
    方法隐藏相当于在子类中定义新方法
    方法重写相当于重定义父类中的方法

  • 父类对象和子类对象转换
    ①子类转换成父类–隐式转换
    ②父类转换成子类–强制转换

     // A是父类,B是子类
     A a = new B();			// 隐式转换
     B b = (B) a;			// 强制转换
    
  • 抽象
    ①将类用abstract修饰形成抽象类,抽象类中可以包括抽象函数和非抽象函数,但是抽象类不能实例化。
    ②抽象函数不定义函数体,可以被子类用来重写。
    ***总结:***子类只能重写父类中的虚函数或者抽象函数,当不需要父类中函数体时,将父类函数声明为抽象函数,否则声明为抽象函数。

  • 密封
    使用sealed修饰的类不能被继承
    使用sealed修饰的方法不能被重写

  • 继承中的构造函数
    在创建子类实例时会先调用父类无参构造函数,如果需要给父类构造函数传参,使用:base(参数)形式:

     public B(string name):base(name)    //调用父类中带参数的构造器
    

版权声明:本文为xiaofen17458原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。