선생님들은 모두 이런 강의 방식을 갖고 계십니다. 처음에는 서부의 산간 지역에서 교실의 나무 칠판 앞에 서서 가르쳤던 선생님이 몇 년 동안 좋은 성적을 거두다가 조금 더 좋은 곳으로 전근하셨습니다. 저는 멀티미디어 장비를 사용하여 가르쳤습니다. 몇 년 후 박사학위 시험을 쳤고, 졸업 후에도 계속 교사로 일했지만 지금은 집에 누워서 원격으로 가르치고 있습니다. 컴퓨터 앞에서. 모두 강의 방식이며, 조건(매개변수)에 따라 실행 과정과 출력 결과가 다릅니다. 이것은 과부하입니다.
오버로드의 정의는 다음과 같습니다. 동일한 클래스 또는 이 클래스의 하위 클래스에 동일한 이름을 가진 여러 메소드가 오버로드됩니다. 그러나 메소드의 이름은 같지만 매개변수 목록은 달라야 합니다. . 서브클래스의 경우, 서브클래스에는 상위 클래스 메소드와 이름은 같지만 매개변수 목록이 다른 메소드가 있으며, 상위 클래스에서 이 이름을 가진 메소드는 보호되고 공개되어야 합니다.
아래 코드를 보세요.
대학 입시를 마친 후 몇몇 학생이 북경대학교와 칭화대학교에 입학하게 되자 학교에서는 선생님들을 5성급 호텔에 저녁 식사에 초대했습니다. 문 앞에서 고객을 맞이할 때 다음과 같이 인사하세요: Mr./Ms., Welcome!
using System; namespace YYS.CSharpStudy.MainConsole { public class YSchool { private int id = 0; private string name = string.Empty; public int ID { get { return this.id; } } public string Name { get { return name; } } public YSchool() { this.id = 0; this.name = @"清华大学附中"; } public YSchool(int id, string name) { this.id = id; this.name = name; } /// <summary> /// 构造器 /// </summary> public YSchool(int id) { this.id = id; this.name = @"陕师大附中"; } } public class YTeacher { private int id = 0; private string name = string.Empty; private YSchool school = null; private string introDuction = string.Empty; private string imagePath = string.Empty; public int ID { get { return id; } } public string Name { get { return name; } } public YSchool School { get { if (school == null) { school = new YSchool(); } return school; } set { school = value; } } public string IntroDuction { get { return introDuction; } set { introDuction = value; } } public string ImagePath { get { return imagePath; } set { imagePath = value; } } /// <summary> /// 构造器 /// </summary> public YTeacher(int id, string name) { this.id = id; this.name = name; } /// <summary> /// 构造器 /// </summary> public YTeacher(int id, string name, YSchool school) { this.id = id; this.name = name; this.school = school; } /// <summary> /// 给学生讲课的方法 /// </summary> public void ToTeachStudents() { Console.WriteLine(string.Format(@"{0} 老师教育同学们: Good Good Study,Day Day Up!", this.name)); } /// <summary> /// 惩罚犯错误学生的方法 /// </summary> /// <param name="punishmentContent"></param> public void PunishmentStudents(string punishmentContent) { Console.WriteLine(string.Format(@"{0} 的{1} 老师让犯错误的学生 {2}。", this.School.Name, this.name, punishmentContent)); } } public class MrTeacher : YTeacher { public MrTeacher(int id, string name) : base(id, name) { } /// <summary> /// 扩展的方法,刮胡子方法。 /// </summary> public void Shave() { Console.WriteLine(string.Format(@"{0} 老师用飞科剃须刀刮胡子。",this.Name)); } } public class MisTeacher : YTeacher { public MisTeacher(int id, string name) : base(id, name) { } /// <summary> /// 扩展方法,护肤的方法 /// </summary> public void SkinCare() { Console.WriteLine(string.Format(@"{0} 老师用香奈儿护肤霜护肤。", this.Name)); } } public class FiveStarsHotel { /// <summary> /// 重载 /// </summary> public void Welcome(MrTeacher mTeacher) { Console.WriteLine(@"先生,欢迎光临!"); } /// <summary> /// 重载 /// </summary> public void Welcome(MisTeacher misTeacher) { Console.WriteLine(@"女士,欢迎光临!"); } } }
결과:
위 코드를 보면 YTeacher와 YSchool의 생성자가 오버로드되어 있습니다.
오버로딩의 장점은 로직을 더 명확하게 할 수 있다는 것입니다. 예를 들어 위 코드에서 Welcome 메서드는 실제로 메서드를 작성한 다음 if else 또는 switch 문을 사용하여 판단하고 최종적으로 결과를 출력할 수 있습니다. 그러나 우리는 특정 기능을 완성하는 것뿐만 아니라 코드를 읽기 쉽고, 논리가 명확하고, 유지 관리하기 쉽게 만들기 위해 프로젝트를 완료합니다. 따라서 코드를 현실 세계의 논리에 더 가깝게 만들어야 합니다. 오버로딩을 사용하면 코드를 더 쉽게 이해하고 실행 단계를 직관적으로 만들 수 있습니다.
위 내용은 C#의 기초 지식을 정리한 것입니다: 기본 지식 (5) 메소드 오버로딩 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!