[C#学习笔记12]实例方法多种形式讲解与静态方法、方法重载
方法定义规范:
访问修饰符 返回值类型 方法名(参数1,参数2......)
{
//功能实现
}
调用规范:对象名.方法名(参数1,参数2......);
注意事项:访问修饰符默认private,不建议省略。根据需要定义成public
方法名用Pascal命名法,首字母大写。动词或动宾短语
有返回值用return返回,return后不能跟其他语句。无返回值使用void。
public class Student
{
//构造方法
/// <summary>
///默认的构造方法:如果不写,会自动生成
/// </summary>
public Student()
{ }
public Student(int studentId, string studentName)
{
this.StudentId = studentId;
this.StudentName = studentName;
}
public Student(int studentId, string studentName, DateTime dateOfBirth)
: this(studentId, studentName)
{
this.DateOfBirth = dateOfBirth;
}
//属性
public int StudentId { get; set; }
public string StudentName { get; set; }
public DateTime DateOfBirth { get; set; }
public int Age
{
get { return DateTime.Now.Year - DateOfBirth.Year; }
}
//还可以使用属性表达式(更简洁)
public int StudentAge => DateTime.Now.Year - DateOfBirth.Year;
// 实例方法的5种形式
/// <summary>
/// 【1】没有返回值,没有参数的方法
/// </summary>
public void GetVoidStudent()
{
string info = $"姓名:{StudentName} 学号:{StudentId}";
Console.WriteLine("这个是第1个方法:没有返回值,没有参数\r\n----------------------");
}
/// <summary>
/// 【2】没有返回值,有参数
/// </summary>
/// <param name="studentName"></param>
/// <param name="studentId"></param>
public void GetVoidStudent(string studentName, int studentId)
{
string info = $"姓名:{studentName} 学号:{studentId}";
Console.WriteLine(info);
Console.WriteLine("这个是第2个方法:没有返回值,有参数\r\n--------------------------");
}
/// <summary>
/// 【3】有返回值、没有参数
/// </summary>
/// <returns></returns>
public string GetStringStudent()
{
string info = $"姓名:{StudentName} 学号:{StudentId}";
Console.WriteLine("这个是第3个方法:有返回值,没有参数\r\n--------------------------");
return info;
}
/// <summary>
/// 【4】有返回值,有参数
/// </summary>
/// <param name="studentName"></param>
/// <param name="studentId"></param>
/// <returns></returns>
public string GetStringStudent(string studentName, int studentId)
{
string info = $"姓名:{studentName} 学号:{studentId}";
Console.WriteLine("这个是第4个方法:有返回值,有参数\r\n-----------------------------");
//如果去掉最后一个else,会出现返回值错误问题
if (studentId == 10001)
return info;
else if (studentId == 10002)
return info + ":10002";
else
return info + ":10000";
}
/// <summary>
/// 【5】参数带默认值的方法
/// </summary>
/// <param name="studentId"></param>
/// <param name="studentName"></param>
/// <returns></returns>
public string GetStudent(int studentId, string studentName = "匿名学员")
{
string info = $"姓名:{studentName} 学号:{studentId}";
Console.WriteLine("这个是第5个方法:参数带默认值的方法\r\n-------------------------");
return info;
}
/// <summary>
/// 静态方法:(调用的时候是通过类名.方法名称调用的)
/// </summary>
/// <returns></returns>
public static string[] GetCourseList()
{
//我们可以从数据库中获取
string[] courseArray = { ".Net课程", ".Net/C#课程", ".NET高级进阶VIP课程", "课程" };
string[] courseInfo = new string[courseArray.Length];
for (int i = 0; i < courseArray.Length; i++)
{
courseInfo[i] = $"第{i + 1}门课程名称:{courseArray[i]}";
}
return courseInfo;
}
}
class TestClass2
{
public void Dowork1()
{
Student student = new Student()
{
DateOfBirth = Convert.ToDateTime("1996-09-10"),
StudentId = 1003,
StudentName = "课程学员小李"
};
//【1】调用没有返回值、没有参数的方法
student.GetVoidStudent();
//【2】调用没有返回值的、有参数的方法
student.GetVoidStudent("新学员小赵", 20001);
//【3】调用有返回值、没有参数的方法
string result = student.GetStringStudent();
Console.WriteLine(result);
//【4.1】调用有返回值、有参数的方法
result = student.GetStringStudent("老学员小张", 20002);
Console.WriteLine(result);
//【4.2】使用《命名参数》(调用的时候使用)
// result = student.GetStringStudent(20002, "老学员小张");//这个方法调用参数是错误的
result = student.GetStringStudent(studentId: 20002, studentName: "上位机学员李四");
//【5.1】有返回值、有参数(参数使用默认值)
Console.WriteLine("这个是带默认值参数的方法");
result = student.GetStudent(20003);
Console.WriteLine(result);
//【5.2】默认值也可以有参数
result = student.GetStudent(2004, "我的新学员小浩");
Console.WriteLine(result);
}
public void Dowork2()
{
//静态方法的调用
Console.WriteLine("展示一下我报名的课程:");
string[] course = Student.GetCourseList();
foreach (var item in course)
{
Console.WriteLine(item);
}
}
}
//构造方法的使用
TestClass1 testClass1 = new TestClass1();
testClass1.Dowork1();
testClass1.Dowork2();
TestClass2 testClass2 = new TestClass2();
testClass2.Dowork1();
testClass2.Dowork2();
方法重载
方法重载优点:减少累的对外接口,只显示一个方法,降低类的复杂度
便于用户的使用和识别,相同功能的方法名一样
方法重载条件:方法名称必须一样;方法的参数个数或类型不一样
方法重载与返回值无关
static修饰后称为静态类、静态方法、静态字段
静态方法的调用:类名.方法名
静态成员的使用
静态成员在程序运行时被调入内存中,在系统未关闭之前不会被GC回收;类成员使用频繁时,可以使用static修饰,不要使用过多;静态成员不能直接调用实例成员,静态方法不能直接调用实例方法;静态方法也可以重载。