C#入门一一this的几种用法

用法一:this代表当前实例对象

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public class Test
    {
        private string strText = "GolbalValue";
        public string getText()
        {
            string strText = "LocalValue";
            return this.strText + "-" + strText;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Test test = new Test();
                Console.WriteLine(test.getText());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                Console.ReadLine();
            }
        }
    }
}

运行结果:

GolbalValue-LocalValue

用法二:用this串联构造函数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public class Test
    {
        public Test()
        {
            Console.WriteLine("No parameter constructor");
        }
        // this()对应无参构造方法Test()
        // 先执行Test(),后执行Test(string text)
        public Test(string text)
            : this()
        {
            Console.WriteLine(text);
            Console.WriteLine("Parameter constructor");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Test test = new Test("Jack");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                Console.ReadLine();
            }
        }
    }
}
No parameter constructor
Jack
Parameter constructor

这种方式可以让我们实现构造函数的复用,节省不必要的代码重复,如下一遍文章则说明了用this串联多个构造函数的相关过程

https://www.jb51.net/article/60445.htm

方法三、用原始类型扩展方法

       用途:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

      它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。仅当您使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。

定义和调用扩展方法:
 1、定义一个静态类以包含扩展方法。该类必须对客户端代码可见。有关可访问性规则的更多信息,请参见访问修饰符(C# 编程指南)。
 2、将该扩展方法实现为静态方法,并使其至少具有与包含类相同的可见性。
 3、该方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。
 4、在调用代码中,添加一条 using 指令以指定包含扩展方法类的命名空间。
 5、按照与调用类型上的实例方法一样的方式调用扩展方法。
  请注意,第一个参数不是由调用代码指定的,因为它表示正应用运算符的类型,并且编译器已经知道对象的类型。您只需通过 n 为这两个形参提供实参。

示例
  下面的示例在 MyExtensions.StringExtension 类中实现了一个名为 WordCount 的扩展方法。该方法对 String 类进行操作,而该类被指定为第一个方法参数。MyExtensions 命名空间被导入到应用程序命名空间中,并且该方法是在 Main 方法内调用的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ExtensionMethods;

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int WordCount(this String str)
        {
            return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }
}

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "Hello Extension Methods";
            int i = s.WordCount();
            Console.WriteLine("WorldCount={0}", i);
        }
    }
}

方法四:索引器

索引器是一组get和set访问器,与属性类似。

//如下是一个类的索引器的表现形式
string this[int index]
{
    set
    {
        //SetAccessorCode
    }
    get
    {
        //GetAccessorCode
    }
}

索引器示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Class1
{
    int Temp0;
    int Temp1;
    public int this[int index]
    {
        get 
        {
            return (0 == index)
                ? Temp0
                : Temp1;
        }

        set
        {
            if (0==index)
                Temp0 = value;
            else
                Temp1 = value;
        }
    }
}

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 a = new Class1();
            Console.WriteLine("Value -- T0:{0}, T1:{1}", a[0], a[1]);
            a[0] = 15;
            a[1] = 20;
            Console.WriteLine("Value -- T0:{0}, T1:{1}", a[0], a[1]);
        }
    }
}

运行结果:

Value -- T0:0, T1:0
Value -- T0:15, T1:20
请按任意键继续. . .

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值