C#中this的用法

this的五大用法

  • 一、限定类似名称隐藏的成员
  • 二、将对象作为参数传递给方法
  • 三、声明索引器
    • 1.索引器
    • 2.索引器与数组的区别
      • (1)索引器的索引值(Index)类型不限定为整数
      • (2)索引器允许重载
      • (3)索引器不是一个变量
    • 3、索引器与属性的区别
  • 四、用this串联构造函数
  • 五、为原始类型扩展方法

一、限定类似名称隐藏的成员

public class Employee
{
    private string alias;
    private string name;

    public Employee(string name, string alias)
    {
        this.name = name;
        this.alias = alias;
    }
}

二、将对象作为参数传递给方法

class Employee
{
    private decimal salary = 3000.00m;
    public void printEmployee()
    {
        Console.WriteLine("Taxes: {0:C}", Tax.CalcTax(this));
    }

    public decimal Salary
    {
        get { return salary; }
    }
}

class Tax
{
    public static decimal CalcTax(Employee E)
    {
        return 0.08m * E.Salary;
    }
}

class MainClass
{
    static void Main()
    {
        Employee E1 = new Employee();
        E1.printEmployee();
    }
}

C#中this的用法_第1张图片

三、声明索引器

1.索引器

静态成员函数,因为它们存在于类级别且不属于对象,不具有 this 指针。 在静态方法中引用 this 会生成错误。

索引器允许类或者结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于他们的访问采用参数。

2.索引器与数组的区别

(1)索引器的索引值(Index)类型不限定为整数

用来访问数组的索引值(Index)一定为整数,而索引器的索引值类型可以定义为其他类型。

(2)索引器允许重载

一个类不限定为只能定义一个索引器,只要索引器的函数签名不同,就可以定义多个索引器,可以重载它的功能。

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

索引器没有直接定义数据存储的地方,而数组有。索引器具有Get和Set访问器。

3、索引器与属性的区别

(1)索引器以函数签名方式 this 来标识,而属性采用名称来标识,名称可以任意
(2)索引器可以重载,而属性不能重载。
(3)索引器不能用static 来进行声明,而属性可以。索引器永远属于实例成员,因此不能声明为static。

1.以字符串作为下标,对索引器进行存取
2. 多参数索引器及索引器的重载

两个案例点击查看

public class IDXer
{
    private string[] name = new string[10];

    //索引器必须以this关键字定义,其实这个this就是类实例化之后的对象
    public string this[int index]
    {
        get
        {
            return name[index];
        }
        set
        {
            name[index] = value;
        }
    }
}

public class Program
{
    static void Main(string[] args)
    {
        //最简单索引器的使用           
        IDXer indexer = new IDXer();
        //“=”号右边对索引器赋值,其实就是调用其set方法
        indexer[0] = "张三";
        indexer[1] = "李四";
        //输出索引器的值,其实就是调用其get方法
        Console.WriteLine(indexer[0]);
        Console.WriteLine(indexer[1]);
        Console.ReadKey();
    }
}

四、用this串联构造函数

使用this会调用无参构造函数

// See https://aka.ms/new-console-template for more information
public class Test
{
    public Test()
    {
        Console.WriteLine("无参构造函数");
    }
    // this()对应无参构造方法Test()
    // 先执行Test(),后执行Test(string text)
    public Test(string text) : this()
    {
        Console.WriteLine(text);
        Console.WriteLine("有参构造函数");
    }
    public Test(string text,string name) : this()
    {
        Console.WriteLine(text);
        Console.WriteLine(name);
        Console.WriteLine("有两个参构造函数");
    }
}

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Test test = new Test("张三","lisi");
            Test test1 = new Test("李四");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
        finally
        {
            Console.ReadLine();
        }
    }
}

C#中this的用法_第2张图片

五、为原始类型扩展方法

当我们需要给一个类增加方法,但又不希望修改这些类,也不希望创建这些类的子类,可以采用扩展方法。扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用

BClass 是需要扩展的类

 public static int AFunc(this  BClass BName)
        {
           
        }

你可能感兴趣的:(C#,C#)