跳到正文

【C#进阶】C#中面向对象编程三个关键字的复习

1.1 new 关键字的作用-----》在堆中开辟空间-----》在开辟的堆空间中创建对象-----》调用对象的构造函数 ① 如何阻止构造函数的初始化?(解决之道:构造函数的私有化) //构造函数( 对自动生成属性的保护) private Object(char gender) { if (gender != '男' && gender != '女') { this.Gender = 's'; } this.Gender = gender; } ② 如何隐藏父类的成员? public class Person { public void sayHello() { Console.WriteLine("父类的"); } } class Student : Person { public new void sayHello() //彻底隐藏了父类的sayHello()方法 { Console.WriteLine("子类的"); } } 1.2 this关键字 ① this指代的是当前对象 //函数 public void Test() { //在函数内部局部变量的优先级要高于成员变量 string Name = "ABC"; Console.WriteLine(Name); //局部变量 Console.WriteLine(this.Name); //全局变量 } ② 显示地调用自己的构造函数 案例一:如果直接创建两个构造函数,相同的代码会产生代码冗余现象 //构造函数 public Teacher(string name, string age, char gender, int chinses, int math, int english) { Name = name; Age = age; Gender = gender; Chinses = chinses; Math = math; English = english; } //构造函数2(Ctrl+K+D 自动对齐) public Teacher(string name, string age, char gender) { this.Name = name; this.Age = age; this.Gender = gender; } 解决之道: //:this()表示调用子类(也就是调用自己的构造函数) //构造函数 public Teacher(string name, string age, char gender, int chinses, int math, int english) { Name = name; Age = age; Gender = gender; Chinses = chinses; Math = math; English = english; } //构造函数2(Ctrl+K+D 自动对齐) ---会产生代码的冗余 /* public Teacher(string name, string age, char gender) { this.Name = name; this.Age = age; this.Gender = gender; }*/ //:this()表示调用子类(也就是调用自己的构造函数) public Teacher(string name, string age, char gender) : this(name, age, gender, 0, 0, 0) { } //只用来显示我的分数情况 public Teacher(string name, int chinese, int math, int english) : this(name, "0", '0', chinese, math, english) { } //实例化一个对象 //会自动调用我的那个默认的构造函数 Teacher t = new Teacher("AAA", "Male", '1', 50, 60, 10); t.sayHi(); t.ShowScore(); //会自动调用第二个构造函数 Teacher t2 = new Teacher("BBB", "FeMale", '1'); t2.sayHi(); //会自动调用第三个构造函数 Teacher t3 = new Teacher("DDD", 88, 66, 55); t3.ShowScore(); 1.3 base关键字① 显示调用父类的构造函数 //this和base的使用 public Student GetStudent() { return this; } ① 调用父类的成员 public Person GetPerson() { //return base; //error:base仅仅是一个纸箱父类的引用罢了 //可以通过base强制调用父类的方法 base.sayHello(); return new Person(); }

评论

填写昵称与邮箱即可评论,无需登录。

推荐阅读

【C#进阶】C#中面向对象编程三个关键字的复习 - 高热度网