关键字 this 的作用

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("", 0) { }
            public Person(string name) : this("evan", null) { }
            public Person(int age) : this("", 20) { }
            public Person(string name, int? age)
            {
                this.personName = name;
                //通过 ?? 判断传入的age是否null值;如果属于null值,则赋值100
                this.personAge = age ?? 100;
            }

            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(20);
            per2.Display();

            Person per3 = new Person("evan");
            per3.Display();

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

运行结果:

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

索引器和数组比较:

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

(2)索引器允许重载

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

索引器和属性的不同点

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

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

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

时间: 2024-12-25 01:18:32

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

【转】java中关键字volatile的作用

在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器).为了性能,一个线程会在自己的memory中保持要访问的变量的副本.这样就会出现同一个变量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory中的值,或者main memory中的值不一致的情况. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.volatile就是用来避免这种情况

java中关键字volatile的作用

用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.volatile就是用来避免这种情况的.volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的(也就是上面说的A) =========================分割线1================================= 版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及本

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

用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.volatile就是用来避免这种情况的.volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的(也就是上面说的A) =========================分割线1================================= 版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及本

全局变量和局部变量,关键字static的作用

全局变量和局部变量 全局变量:在函数外定义的变量成为全局变量;全局变量在静态存储区分配存储但愿,在程序运行期间都不释放,在文件中的函数均可调用该全局变量,其他文件内的函数调用全局变量,需加extern声明. 静态全局变量:在函数外定义变量时,若加上static声明,则此变量为静态全局变量. 局部变量:在一个函数中或复合语句中定义的变量,在动态存储区分配存储单元,在调用时动态分配,在函数或复合语句结束时自动释放. 静态局部变量:在一个函数中定义局部变量时,若加上statci声明,则此变量为静态局部

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

一.#import和#include的区别当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误但是使用两次#import的话,不会报错,所以他可以解决重复导入的问题,他会做一次判断,如果已经导入一次就不导入了 二.关键字@class的作用在来看一下OC中的关键字@class的作用,在看他的作用之前,先来看一个问题:现在有一个课程类Classes和学生类Student,他们两之间需要相互引用(导入).直接看代码比较直接:Cla

线程同步关键字synchronized的作用

线程和进程的区别:  线程:是进程内部中的单一顺序控制流,一个进程拥有多个线程,多个线程共享一个进程的内存空间.   进程:是指一种"自包容"的运行程序,由操作系统直接管理.直接运行.有直接的地址空间,每个进程以开始都会消化内存. 线程同步:当二个或二个以上的进程同时访问一个资源时,为了保护资源的数据安全,只允许同一时间一个进程的访问,别的进程需要等待该进程放弃这个资源使用权时才能继续访问. 用一个列子来说明线程同步到底是怎么回事. package com.project.thread

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

程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中. 1.作用于变量: 用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态 存储的,即指令执行到变量定义处时才给变量分配存储单元,跳出代码块时释放内存单元(生命期).用static声明局部变量时,则改变变量的存储方式(生 命期),使变量成为静态的局部变量,即编译时就为变量分配内存,直到程序退出才释放存储单元.这样,使

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

作为C#的程序员来说,在遇到线程同步的需求时最常用的就是lock关键字.但如何正确并有效地使用lock,却是能否高效地达到同步要求的关键.正因为如此,程序员需要完全理解lock究竟为程序做了什么. 所涉及的知识点 • lock的等效代码 • System.Threading.Monitor类型的作用和使用方法 分析问题 1.lock的等效代码 在.NET的多线程程序中,经常会遇到lock关键字来控制同步,比如下列代码: private object o = new object(); publi

Java关键字解释及作用

JAVA 关键字及其作用解释 1. 访问控制 1) private 私有的 private 关键字是访问控制修饰符,可以应用于类.方法或字段(在类中声明的变量). 只能在声明 private(内部)类.方法或字段的 类中引用这些类.方法或字段.在类的外部或者对于子类而言,它们是不可见的. 所有类成员的默认访问范围都是 package 访问,也就是说,除非存在 特定的访问控制修饰符,否则,可以从同一个包中的任何类访问类成员. 2) protected 受保护的 protected 关键字是可以应用

java.lang.Object 的 wait 和 notify方法,及关键字 synchronized的作用

1. synchronized的作用 synchronized类似于win32中的临界区,临界区的作用:对于共享的全局变量,在多个线程并发的情况下,对这样的全局变量的读写就会发生读写的冲突, 使得全局变量的读写,能够以原子的方式被执行,而不是一个线程要读取全局数据时候,由于线程调度,而另一个线程则此时被唤醒,改变了这个全局变量的值, 这样使得读取的线程获得的数据不稳定,所以对于全局变量的读写的代码,我们要使用临界区使得这些代码原子化,此时只要在临界区中的代码,就会以原子方式执行, 而不会由于线程