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();
}
评论
填写昵称与邮箱即可评论,无需登录。