zoukankan      html  css  js  c++  java
  • 关键字 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,属性可以

  • 相关阅读:
    提纲挈领webrtc之vad检测
    提纲挈领webrtc音频处理算法之写在前面的话
    搭建git远程服务器三步骤
    详解m4文件
    chrome浏览器被reimage pair 劫持怎么处理
    linux查看系统32位还是64位
    git gc和fsck的用法
    ubuntu 16.04 的64位 安装arm-none-linux-gnueabi-gcc的步骤和问题解决
    利用终端命令实现进入ntfs分区有两种方法。
    ubuntu-14.10下,安装gcc交叉编译器遇到问题及解决方法
  • 原文地址:https://www.cnblogs.com/miaoying/p/5019381.html
Copyright © 2011-2022 走看看