1.关键字 this

①是指当前对象自己

当一个类中要明确指出使用对象自己的变量或函数时,就应该加上this关键字,小栗子a如下:

  public class A
{
string Name = "我是一号~~";
public A(string Name)
{
Console.WriteLine("不加this的时候,Name的值为:{0}", Name); //此时输出 为当前函数自己的变量
Console.WriteLine("不给成员变量赋传过来的参数Name值,this.Name的值为:{0}", this.Name); //此时输出 为当前类的成员变量
this.Name = Name;
Console.WriteLine("给成员变量赋传过来的参数Name值后,this.Name的值为:{0}", this.Name); //此时进行了赋值
}
}
static void Main(string[] args)
{
Console.WriteLine();
A a = new A("我是二号~~");
Console.ReadKey();
}

输出结果:

②把this作为参数传递

当要把自己作参数传递给别的对象时,可用this关键字,小栗子b如下:

public class A
{
B b;
public void Show()
{
b = new B(this);
Console.WriteLine("this代表将要创建的A的对象");
}
}
public class B
{
A a1;
public B(A a2) //即B的实例中有一个A类型的成员变量
{
a1 = a2;
}
}
static void Main(string[] args)
{
A a = new A();
a.Show();
Console.ReadKey();
}

③在构造函数中,通过this可以调用同一个class里面的其他构造函数,也叫做this串联构造函数,小栗子c如下:

        public class Person
{
public string personName;
//定义年龄为可空类型,这样就可以赋予其null值
public int? personAge; //下面前三个构造函数都是去调用参数最多的第四个构造函数,只取它们所需要的部分参数即可
//这样的做法就是this串联构造函数
public Person() : this("", ) { }
public Person(string name) : this("evan", null) { }
public Person(int age) : this("", ) { }
public Person(string name, int? age)
{
this.personName = name;
//通过 ?? 判断传入的age是否null值;如果属于null值,则赋值100
this.personAge = age ?? ;
} public void Display()
{
Console.WriteLine("Name:{0},Age:{1}", personName, personAge);
}
}
static void Main(string[] args)
{
Person per1 = new Person();
per1.Display(); Person per2 = new Person();
per2.Display(); Person per3 = new Person("evan");
per3.Display(); Person per4 = new Person("evan", );
per4.Display(); Console.ReadLine();
}

运行结果:

http://i.cnblogs.com/EditPosts.aspx?postid=5019381

这样的做法就是让一个接受参数最多的构造函数做"主构造函数", 且在主构造函数中实现必须的业务逻辑,其余的构造函数只要使用this关键字把传入的参数转发给主构造函数,并且提供必须的其它参数,这样子,我们整个类 中需要我们操心的就是那个主构造函数了,其余构造函数基本上可以为空。

注意:如果构造函数链中还有实现各自的逻辑,那么实际上是先执行主构造函数的代码,再执行各自逻辑,使用这种做法,真正的工作都交给了一个构造函数,类定义就会更简洁、更易维护、简化了编程任务。

④this可以用来声明索引器

1.首先,什么是索引?

索引也是一种类成员,而且必须为实例成员,因为它就是为实例成员提供的一种访问方式,所以不能声明为static的。索引与属性类似,也有get访问器和 set访问器。而且索引实际上就是一组get访问器和set访问器,而访问器的本质是方法,所以说,索引器的本质就是方法。索引器经常是在主要用于封装内部集合或数组的类型中声明的。

2.索引声明使用下面的语法:

    [访问修饰符] 返回值类型 this [ 参数1,参数2...]

    {

      get{......}

      set{......}

    }

语法要点:索引名称永远为this;索引的参数在方括号中间;索引的参数列表中至少有一个参数。

小栗子d如下:

        public class Demo
{
public string Name { get; set; }
private string[] Sex = new string[];
public string this[int Index]
{
get
{
if(Index<)
{
return Sex[Index];
}
return null;
}
set
{
if(Index<)
{
Sex[Index] = value;
}
}
}
}
static void Main(string[] args)
{
Demo demo = new Demo();
demo[] = "女";
demo[] = "男";
demo[] = "其他";
demo.Name = "小明";
Console.WriteLine("Name为{3},Sex的三个实例分别为:{0},{1},{2}.",demo[], demo[],demo[],demo.Name);
Console.ReadKey();
}

运行结果:

3.索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的。

索引器和数组比较:

(1)索引器的索引值(Index)类型不受限制

(2)索引器允许重载

(3)索引器不是一个变量

索引器和属性的不同点

(1)属性以名称来标识,索引器以函数形式标识

(2)索引器可以被重载,属性不可以

(3)索引器不能声明为static,属性可以

关键字 this 的作用的更多相关文章

  1. java中关键字volatile的作用

    用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.volatile就是用来 ...

  2. 转!!java中关键字volatile的作用

    用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.volatile就是用来 ...

  3. #import和#include的区别 关键字@class的作用

    一.#import和#include的区别当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误但是使用两次#import的话,不 ...

  4. java中关键字volatile的作用(转载)

    转载:http://blog.csdn.net/orzorz/article/details/4319055 用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对 ...

  5. static 关键字有什么作用

    static关键字的含义及使用场景 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局静态成员变量,修饰方法表示静态方法.(注意:不能修饰 ...

  6. SpringData like关键字不起作用

    使用springdata简单查询时,like关键字不起作用 Hibernate: select article0_.oId as oId1_2_, article0_.articleAbstract ...

  7. C#中的lock关键字有何作用

    作为C#的程序员来说,在遇到线程同步的需求时最常用的就是lock关键字.但如何正确并有效地使用lock,却是能否高效地达到同步要求的关键.正因为如此,程序员需要完全理解lock究竟为程序做了什么. 所 ...

  8. C语言中Static和Const关键字的的作用

    程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中. 1.作用于变量: 用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块 ...

  9. 《Java程序员面试笔试宝典》之Static关键字有哪些作用

    static关键字主要有两种作用:第一,只想为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关.第二,希望某个方法或属性与类而不是对象关联在一起,也就是说,在不创建对象的情况下就可以通过 ...

  10. Java内存模型及Java关键字 volatile的作用和使用说明

    先来看看这个关键字是什么意思:volatile  [ˈvɒlətaɪl] adj. 易变的,不稳定的; 从翻译上来看,volatile表示这个关键字是极易发生改变的.volatile是java语言中, ...

随机推荐

  1. linux命令(7)killall

    killall命令: Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name).我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀 ...

  2. Json--Android中数据文件解析(Json解析--从服务器端获取数据并且解析,显示在客户端上面)

    前面学习过了使用SAX解析XML数据(点击进入:SAX解析XML数据),今天学习Json解析: 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据 ...

  3. 转-TabHost组件(一)(实现底部菜单导航)

    http://www.cnblogs.com/lichenwei/p/3974009.html 什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用wind ...

  4. Redis各种数据结构内存占用测试

    启动时:(redis为空) 插入数据量都为100W(100W个key或者list中100W个值,或者1000个key,每个key中1000个值) String Key value # Memory u ...

  5. DTD限制XML文件

    需要通过使用Microsoft Visual Studio 2010.XMLSpy或者eclipse软件来检查校验 文件中有中文,需要存为utf-8编码 book.dtd <!ELEMENT 书 ...

  6. Mac 上SVN上传.a文件

    SVN默认是忽略.a文件,所以修改配置文件去掉忽略配置行的 *.a 通过终端打开配置文件: open ~/.subversion/config 把下面两行(也可能是一行)中的注释和*.a去掉, #gl ...

  7. [ActionScript 3.0] AS3.0 获取像素点的灰度

    /** * 获取像素点的灰度 * @color 像素点的颜色值 * @return uint */ function getGray(color:uint):uint { return getR(co ...

  8. [ActionScript 3.0] AS3 绘制立方体

    package { import flash.display.Sprite; import flash.events.Event; import flash.geom.Vector3D; import ...

  9. ArcGIS Server建立缓存(切图)原理解析[图解] (转载)

    GoogleMap ,VirtualEarth ,YahooMap 等,目前所有的WebGIS都使用了缓存机制 以提高地图访问速度.原理都是将地图设定为多个比例尺,对于每个比例尺提前将地图分成若干小图 ...

  10. 山东省第一届ACM省赛

      ID PID Title Accepted Submit A 2151 Phone Number 22 74 B 2159 Ivan comes again! 1 17 C 2158 Hello ...