函数参数
方法中的参数除了定义数据类型外,还可以定义引用参数和输出参数。引用参数使用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);Lambda 表达式
如果在方法定义中定义了返回值类型,在表达式中不必使用return,直接使用=>,但是=>只能用在方法中只有一条语句的情况下。public int Add(int a, int b) => a+b;控制台打印
Console.WriteLine("函数返回值为:" + res); DateTime dt = DateTime.Now; Console.WriteLine("当前日期为:{0}", dt); Console.WriteLine("当前时本月的第{0}天", dt.Day);嵌套类
如果在其他类中调用嵌套类的成员,需要使用“外部类.嵌套类”的方式创建嵌套类的对象,从而通过嵌套类的对象调用其成员。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(); } }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));string类使用
IndexOf 方法得到的是指定字符串在原字符串中第一次出现的位置;
LastlndexOf 方法得到的是指定字符串在查找的字符串中最后一次出现的位置。
指定的字符串在查找的字符串中不存在,函数结果都为 -1类型转换
Parse 方法用于将字符串类型转换成任意类型
int num1 = int.Parse(Console.ReadLine());Convert 能将任意数据类型的值转换成任意数据类型,前提是不要超出指定数据类型的范围。
float num1 = 82.26f; int integer; string str; integer = Convert.ToInt32(num1); str = Convert.ToString(num1);
数组
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()—返回某个元素最后一次出现的位置get和set函数
public double Price { get { return price; } set { if(value >= 0) { price = value; } else { price = 0; } } } // 调用 Price p = new Price(); p.price = 100;Equals函数-判断两个对象是否相等
Equals (object ol, object o2); //静态方法 Equals (object o); //非静态方法继承
子类如果需要调用父类中的成员,可以借助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) //调用父类中带参数的构造器