C#this关键字
说明:
①this引用的是类中当前实例
②静态(static)函数没有this关键字
③this可以访问类中的属性,成员方法,构造方法
this四大应用
1:this访问属性—(类中解决与局部变量名称冲突问题)
类中this同一个字段会出现阴影
代码如下:
static void Main(string[] args)
{
Console.Write("请输入你的名字:");//控制台输入
string name=Console.ReadLine();//ReadLine()输入string类型数据
Person p = new Person(name);//利用构造函数传递参数
p.Print();
}
class Person
{
private string name;//字段private
public Person(string name)//一个参数的构造函数
{
this.name = name;
//形参名字与类中字段名字相同,为了区分类中的属性和形参 使用this
}
public void Print()
{
Console.WriteLine("我的名字叫:" + this.name);
Console.ReadKey();
}
}
2:this访问成员方法—(在类中调用自己的成员方法)
代码如下:
static void Main(string[] args)
{
Print p = new Print();
p.Test0();
Console.ReadKey();
}
class Print
{
public void Test0()
{
Console.WriteLine("这是Test0方法。");
this.Test1();//对类中自己的方法进行调用
}
public void Test1()
{
Console.WriteLine("这是Test1方法。");
}
}
3:this访问构造方法—(构造方法在实例对象时会被.NET自动调用,我们不能像调用其他成员方法那样调用构造方法,必须用:this(参数1,参数2,…)
格式:
// public 类名(形参)
// :this(实参1,参数2...)
// {}
代码:
static void Main(string[] args)
{
Print p = new Print("Aucl");//第一步:访问一个参数的构造方法
Console.ReadKey();
}
class Print
{
private string name;
private int age;
public Print()//第六步:形参到这里 ★第九步
{
Console.WriteLine("无参的构造方法。");//第七步:输出 ★第八步
Console.WriteLine();
}
public Print(string name)//第二步:形参到这里
:this("Aucl",20) //第三步:通过this访问两个参数的构造方法
{ //★第十一步
Console.WriteLine("我的名字叫:" + this.name);
Console.WriteLine("有一个参数的构造方法。");
}
public Print(string name, int age)//第四步:形参到这里
: this() //第五步:通过this访问无参数的构造方法
{
Console.WriteLine("我的名字叫{0},今年{1}岁",this.name,this.age);//★第十步
Console.WriteLine("有2个参数的构造方法。");
Console.WriteLine();
}
}
拓展1:在构造方法中使用this调用重载构造方法的代码必须放在第一行,否则程序不能通过
①正确事例:
②错误事例:
拓展2:一个构造方法中只能调用一次重载的构造方法
拓展3:
①:构造方法内可以通过this.[参数]==>成员方法(构造方法)
static void Main(string[] args)
{
Print p = new Print();
Console.ReadKey();
}
class Print
{
public Print()//构造方法
{
Console.WriteLine("无参数的构造方法。");
this.Print1();
}
public void Print1()//成员方法
{
Console.WriteLine("通过[this.普通方法名]调用普通成员方法。");
}
}
②:成员方法内不能通过:this.[参数]=/=>构造方法
4:索引器
*(索引器与属性可以对比学习,通常属性只能访问单一字段,如果访问多个数据成员需要索引器,它能够让对象通过数组的方式来进行提取) *
格式:
/* [修饰符]数据类型 this [索引类型 index]
* {
* get
* {
* //设置返回值
* }
* set
* {
* //设置隐式参数value给字段赋值
* }
*
* }
代码:
static void Main(string[] args)
{
Person p = new Person();//创建对象
p[1]="Aucl";
p[2]="男";
p[3]="001";
//索引器可以像数组一样对类成员进行访问
p.Print();
Console.ReadKey();
}
class Person
{
//★如果字符较多我们就需要定义很多个get/set来对字段进行赋值操作
//★而有了索引器,只要通过定义一个索引器就可以对多个字段进行赋值
//★简单 高效
private string name;
private string xb;
private string tel;
public string this[int index]
{//定义索引器
//get访问器没有break
get
{
switch(index)
{
case 1:
return name;
case 2:
return xb;
case 3:
return tel;
default:
throw new ArgumentOutOfRangeException("index");//确定输入是否正确
}
}
//set访问器有break
set
{
switch(index)
{
case 1:
name = value;
break;
case 2:
xb = value;
break;
case 3:
tel = value;
break;
}
}
}
public void Print()
{
Console.WriteLine("我的名字叫:" + name + ",性别:" + xb + ",电话:" + tel);
}
}
每天进步一点点。 |